.NET RSA 签名/验证数据许可密钥



>伙计们,我得到了一个项目(服务器端 C# sn 生成器),我必须为其实现基本的许可系统(它更像是一个测试而不是实际项目),但是有一些要求:

  1. 它必须使用 RSA 2048
  2. 它必须生产人性化的 16 个字符 (0-F),由 3 个破折号分隔(总共 19 个符号)

此外,客户端部分正在验证序列号,如下所示:

VerifyMyKey(p1, p2, p3);

哪里:

  • P1 是 XML 编码的公共/指数值
  • P2 是散列的唯一用户 ID(在我的情况下,项目使用的是 SHA1)
  • BP3 是漂亮的序列号

是否有任何 SignData 生成数字的示例,例如:

1111-1111-1111-1111

或类似的东西,因为我现在得到的只是 base64 编码的字符串,它正在工作,但它对人类不友好。

有人有什么想法吗?

你的意思是签名应该正好是 16 个字节长?这在 2048 位 RSA 中是不可能的。根据定义,一个密码文本块(包括数字签名)的长度与密钥大小相同,即 2048 位 = 256 字节。RSA与块一起工作,它不是流密码。任何不足的东西都不会正确解密/验证。

如果您希望输出具有任意长度但由 16 个十六进制数字组成,那是另一回事。RSA 将数据输出为字节数组,请随意将它们表示为十六进制数字 - 每字节两位数。一个 2048 位二进制数据块的长度为 512 个十六进制数字。

最新更新