md5与rsa验证原理
来源:互联网 发布:php post接口 编辑:程序博客网 时间:2024/05/21 08:39
在日常的工作中,我们对外提供的接口或调用三方的接口往往有一步生成签名或验签的步骤,这个步骤主要是验证调用方是
不是合法的以及内容是否被修改。比如:对于某些网上公开下载的软件,视频,尤其是镜像文件。如果被修改了可能会导致用不了
或者其他的问题,发布者镜像MD5算法计算一组数值。让下载的用户进行MD5数值对比,也就是MD5校验啦。由于MD5加密不可逆算,
如果数值一样,那就表示文件没有被修改的。反之,则被修改了。
接下来通过文字介绍、代码、运行结果的方式给大家介绍RSA、MD5生成签名和验签;
一、MD5签名与验签
1.MD5介绍
MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法。
MD5算法具有以下特点:
MD5生成签名和验签需要MD5 key,这个key值就是一段字符串没有任何限制比如:123456ADSEF1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
2.签名与验签流程
首先参数放入一个字符串数组signFields,把参数和值放入一个对象或map中,使用JSONObject把这个对象转化成json对象。
然后构建签名原文,在构建签名原文时,我们需把参数按照字典(比如a,b,c)顺序排序,具体排序方法直接调java的Arrays.sort方法。
然后按照key=value的方式把所有参数和值拼接成字符串,多个参数直接以“&”符号隔开,再然后把MD5 key拼接在该签名原文的最后。
最后使用MD5Encrypt.getMessageDigest(signSrc)生成签名。
验签很简单,验签方按照上面的签名流程生成的签名与传过来的签名作对比如果相等就验签成功,否则验签失败。
3.具体代码如下:
需验签的参数map:
MD5生成签名字符串:构建签名原文:MD5验证签名:main方法:执行结果:二、RSA签名与验签1.RSA介绍
RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对
其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,
私钥则为自己所有,供解密之用。解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送
到解密者,解密者用私钥解密将密文解码为明文。
以甲要把信息发给乙为例,首先确定角色:甲为加密者,乙为解密者。首先由乙随机确定一个KEY,称之为密匙,将这个KEY始终保
存在机器B中而不发出来;然后,由这个 KEY计算出另一个KEY,称之为公匙。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。
接下来通过网络把这个公钥传给甲,甲收到公钥后,利用公钥对信息加密,并把密文通过网络发送到乙,最后乙利用已知的私钥,就对密文进
行解码了。以上就是RSA算法的工作流程。
2.生成签名与验签流程
生成签名方:首先对参数放入一个字符串数组signFields,把参数和值放入一个对象或map中,使用JSONObject把这个对象转化成json对象。
然后构建签名原文,在构建签名原文时,我们需把参数按照字典(比如a,b,c)顺序排序,具体排序方法直接调java的Arrays.sort方法。 然后使用RSA
的私钥对签名原文进行签名。
验签方:和生产签名方一样先生成签名原文,然后使用RSA的公钥、生成签名方传入的签名及签名原文对生成签名方传入的签名进行验证,验
证结果为true说明验证成功,否则为未通过。
- md5与rsa验证原理
- MD5与 RSA
- openssl md5 rsa 签名和签名验证
- RSA-签名与验证
- MD5、RSA、DES加密算法原理解析
- 三大常用机密算法原理与基础使用MD5、3DES、RSA
- MD5加密与验证
- rsa数字签名与hash/md5数字摘要
- MD5原理与代码
- 公钥系统之RSA原理验证
- RSA算法原理与例子
- RSA算法原理与例子
- RSA原理、加密与破解
- RSA加密原理与过程
- MD5算法原理与实现
- MD5算法原理与实现
- MD5算法原理与实现
- OpenSSL RSA 消息签名与验证
- 51单片机RAM区域的划分
- Android studio -VSN 使用笔记
- 第八周 输出星号4
- LNMP源码编译安装
- Mac升级为macOS Sierra Xcode报错Command /usr/bin/codesign failed with exit code 1
- md5与rsa验证原理
- Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id<******Delegate>'
- 美容热点产品
- 印度银行:为什么Essar石油出售给俄罗斯的Rosneft是一个大的交易?
- Swift Cookie信息的读写
- linux下每周备份tomcat日志的shell脚本
- sed和awk中使用shell变量
- python 装饰器
- 构造函数