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

时间:2012-04-16 16:03:39

标签: c# licensing system rsa

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

  1. 必须使用RSA 2048
  2. 它必须产生人性化的16个字符(0-F),用3个破折号分隔(总共19个符号)
  3. 此外,客户端部件正在验证序列号,如下所示:

    VerifyMyKey(p1, p2, p3);
    

    其中:

    • p1是xml编码的公共/指数值
    • p2是散列的唯一用户ID(在我的情况下,项目使用sha1)
    • bp3是漂亮的序列号

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

    1111-1111-1111-1111
    

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

    有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

你的意思是签名应该是16个字节长吗?使用2048位RSA是不可能的。根据定义,一个密文块(包括数字签名)的长度与密钥大小相同,即2048位= 256字节。 RSA使用块,它不是流密码。少一些东西不能正确解密/验证。

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