使用RSA签名验证初体验

博客第一篇,将原来学习C#及RSA时编写的一个demo重新发布出来,之前只是在自己的空间中进行了分享。以下是当时写的内容,可能理解上还存在着问题,不断学习中。。

开头是不是要写点儿什么呢?纠结了会儿…算了,不写开头了,愉快的进入正题。

在一个简单的demo做出来之后,开始想着往上边添加一些其他的东西。。。便有了下边的情况:

①没注册不让使用功能

②只有特定生成的注册码才能注册成功

③注册成功之后再打开就别再让注册了,但是还得验证下

紧接着就到注册码的生成和验证:

①注册码生成:不同的主机应该添点什么生成只适合它的独一份呢?一个序列号经过注册机变成了一个注册码

②验证:那么多独一份注册码怎么对应的验证

之后:

①用机器码当序列号是可行的,这个是独一份的,填上签名

②验证的过程,让注册码跟自己的序列号经过处理对比下,一致了验证通过

③只有自己的注册机才能完成签名,所有人都能进行验证,是自己签名的才能使用,不是自己签名的不让用~~

经过一番搜索之后,RSA

  • 公钥私钥的生成

  • 私钥签名

  1. 序列号:使用机器码信息,这里只使用了CPU的信息,然后经过了一道MD5加密(直接只用CPU的信息似乎有点少了)

2.注册机:根据序列号生成注册码

3.私钥在生成注册码时进行使用

  • 公钥验证

  1. 注册时

同时在客户端下生成文件Regist.key。

2.注册之后的使用中

通过公钥校验Regist.key文件中的签名信息以及经过处理的待签名序列号信息。这样即便是Regist.key文件被复制,但是在校验中获取的是当前环境下的序列号信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、数字签名原理 用RSA算法做数字签名,总的来说,就是签名者用私钥参数d加密,也就是签名验证者用签字者的公钥参数e解密来完成认证。 下面简要描述数字签名和认证的过程。 (1)、生成密钥 为用户随机生成一对密钥:公钥(e,n)和私钥(d,n). (2)、签名过程 a) 计算消息的散列值H(M). b) 用私钥(d,n)加密散列值:s=(H(M)) mod n,签名结果就是s. c) 发送消息和签名(M,s). (3)、认证过程 a) 取得发送方的公钥(e,n). b) 解密签名s:h=s mod n. c) 计算消息的散列值H(M). d) 比较,如果h=H(M),表示签名有效;否则,签名无效。 根据上面的过程,我们可以得到RSA数字签名的框图如图2-1: 图 2-1 RSA数字签名框图 2、 假设Alice想和Bob通信,以本地两个文件夹Alice和Bob模拟两个用户,实现消息M和签名的模拟分发 (1)、Alice通过RSA算法生成一对密钥:公钥(e,n)和私钥(d,n),将公私钥分别存入pubKey.txt和priKey.txt中。 pubKey.txt中公钥如下: priKey.txt中私钥如下: (2)、将Alice中的pubKey.txt拷到Bob中,模拟公玥的分发。 (3)、将Alice中的消息info.txt做散列,将散列后的值存入hashInfo.txt中。 (4)、将Alice中的消息hashInfo.txt和签名sign.txt拷到Bob中,实现M密文状态下的签名与模拟分发、消息传递。 (5)Bob取得公钥pubKey.txt,用公钥解密签名,计算消息的散列值H(M).比较,如果h=H(M),表示签名有效;否则,签名无效。 后台运行结果如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值