【发布时间】:2017-02-24 14:07:43
【问题描述】:
我工作的公司想要创建某种注册流程,最后,用户必须输入密钥才能激活他的产品。
我已经搜索并找到了一些解释如何生成密钥的资源。其中一位 (How to generate and validate a software license key?) 建议获取一些数据(如注册数据,结合硬件信息),并将其与数据散列的私钥加密相连接,然后计算 base32 编码。
所以当密钥输入到程序中后,程序会解码base32,计算出数据,并用公钥验证密钥中的签名是有效的(这样我们就可以确定密钥来自于公司)。
我发现了 Bouncy castle,但我没有看到任何 schnorr 实现(事实上,我在 c# 中没有找到很多 if 的实现)。我制作小签名的所有努力都失败了(我设法创建的最小签名是 56 字节)。
假设数据 + 签名是 64 字节。我的基数 32 字符串将是 64 * 8 / 5,即 103 个字符。加上额外的 - 用于定界,并使其更具可读性,我们得到一些不可读且无法通过电话口述的内容(如果需要)。
那么我错过了什么? 如果我需要创建一个 32 个字符的密钥,那么我需要 20 个字节的数据 + 哈希。
我该怎么做?
任何使用 .net Cryptography 或 Bouncy Castle(缺少任何 c# 文档和示例)的示例都会有所帮助。
【问题讨论】:
标签: c# digital-signature