#key #byte #serial #checksum #seed #verifying #checked

serial-key

从种子创建可验证的串行密钥

2 个稳定版本

使用旧的 Rust 2015

2.0.0 2018年2月2日
1.0.0 2017年8月15日

#23 in #verifying

21 每月下载量
用于 keygen

MIT 许可证

14KB
205 代码行,不包括注释

serial-key

创建从种子生成串行密钥的函数,基于 这篇文章

可以通过校验和或验证密钥中的字节来检查串行密钥的有效性。

用法

在此可以找到示例密钥生成器

Cargo.toml

[dependencies]
serial-key = "2.0"

main.rs

extern crate serial_key;

use serial_key::{ make_key, check_key, check_key_checksum, Status };

fn main () {
    let seed = 0x3abc9099;
    let num_bytes = 4;
    let byte_shifts = vec![(24, 3, 200), (10, 0, 56), (1, 2, 91), (7, 1, 100)];

    let key = make_key(&seed, &num_bytes, &byte_shifts);
    assert_eq!(key, "3ABC-9099-E39D-4E65-E060");

    let no_blacklist = vec![];
    assert_eq!(check_key(&key, &no_blacklist, &num_bytes, &byte_shifts), Status::Good);

    let blacklist = vec!["3abc9099".to_string()];
    assert_eq!(check_key(&key, &blacklist, &num_bytes, &byte_shifts), Status::Blacklisted);

    let wrong_checksum = "3ABC-9099-E39D-4E65-E061";
    assert_eq!(check_key(&wrong_checksum, &no_blacklist, &num_bytes, &byte_shifts), Status::Invalid);

    let second_fake_key = "3ABC-9099-E49D-4E65-E761";
    assert_eq!(check_key(&second_fake_key, &no_blacklist, &num_bytes, &byte_shifts), Status::Phony);

    assert!(check_key_checksum(&key, &num_bytes));
}

种子

种子需要是八位十六进制格式。

字节偏移量

字节偏移量用于创建密钥;这是一个包含三个 i16 数字(0-255)的元组的向量。在创建密钥时,必须保存用于创建密钥的字节偏移量,否则以后将无法验证密钥。

黑名单

黑名单是一个种子向量;任何包含此向量中种子的密钥都将无法通过验证。

验证/校验和

checksum 方法是一种快速但相对不精确的确定密钥是否无效的方法 - 它仅检查校验和是否与密钥的其余部分匹配,尽管可以更改密钥和校验和而仍然有效。验证函数检查校验和以及密钥中的几个字节,以确定密钥实际上是否有效 - 完整的推理见 原始文章,但基本上这是为了您有一个快速且简单的检查密钥在启动时的有效性(checksum),并在稍后尝试使用更多功能时进行完整检查。在启动时进行快速检查意味着逆向工程师不知道软件中何时进行完整检查,因此没有明显的入口点。

依赖关系

~4MB
~78K SLoC