关于RSA加密和签名的区别与联系

  发现网上对于RSA加密和签名的介绍普遍偏向于使用和概念的说明,今天想说一点不一样的。对于加解密和签名的使用及概念就不再说了,不知道的请自行百度。

  签名的本质其实就是加密,但是由于签名无需还原成明文,因此可以在加密前进行哈希处理。所以签名其实就是哈希+加密,而验签就是哈希+解密+比较。

  签名过程:对明文做哈希,拼接头信息,用私钥进行加密,得到签名。

  验签过程:用公钥解密签名,然后去除头信息,对明文做哈希,比较2段哈希值是否相同,相同则验签成功。

  

  附上一段java代码,可见使用解密方法可以从签名中得到原文的哈希值。

  最后附上一些哈希的头信息(16进制)

    md2: "3020300c06082a864886f70d020205000410"
    md5: "3020300c06082a864886f70d020505000410"
    sha1: "3021300906052b0e03021a05000414"
    sha224: "302d300d06096086480165030402040500041c"
    sha256: "3031300d060960864801650304020105000420"
    sha384: "3041300d060960864801650304020205000430"
    sha512: "3051300d060960864801650304020305000440"
    ripemd160: "3021300906052b2403020105000414"

  

  

原文地址:https://www.cnblogs.com/wsss/p/11993763.html

时间: 2024-10-09 12:50:37

关于RSA加密和签名的区别与联系的相关文章

Java使用RSA加密解密签名及校验

由于项目要用到非对称加密解密签名校验什么的,于是参考<Java加密解密的艺术>写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享! RSA加密解密类: package com.ihep; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; imp

关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名

需求环境: 西安项目中,客户要求保护用户的密码信息,不允许在http中传递明文的密码信息. 实现: 用RSA非对称加密方式实现.后台生成rsa密钥对,然后在登陆页面设置rsa公钥,提交时用公钥加密密码,生成的密文传到后台,用私钥解密,获取密码明文. 这样客户端只需要知道rsa加密方式和公钥,前台不知道私钥是无法解密的,此解决方案还是相对比较安全的. 附件是参照网友资料的java+JS的实现,放在这里供大家下载.访问方式/RSA/login.jsp. 需要到http://www.bouncycas

python实现RSA加密和签名以及分段加解密的方案

python实现RSA加解密和签名加解签 1.生成秘钥对 在这边为了方面演示,手动生成一个密钥对(项目中的秘钥对由开发来生成,会直接给到我们) 生成秘钥对的时候,可以指定生成秘钥的长度,一般推荐使用1024bit, 1024bit的rsa公钥,加密数据时,最多只能加密117byte的数据),数据量超过这个数,则需要对数据进行分段加密,但是目前1024bit长度的秘钥已经被证明了不够安全,尽量使用2048bit长度的秘钥.2048bit长度的秘钥,最多245byte长度的数据 计算公式如下: 秘钥

JavaSE--[转]加密和签名的区别

转载:http://blog.csdn.net/u012467492/article/details/52034835 私钥用来签名的,公钥用来验签的.公钥加密私钥解密是秘送,私钥加密公钥解密是签名 作者:CM Binder 就拿A给B发送经过签名加密信息来说:1.A对信息签名的作用是确认这个信息是A发出的,不是别人发出的:2.加密是对内容进行机密性保护,主要是保证信息内容不会被其他人获取,只有B可以获取. 也就是保证整个过程的端到端的唯一确定性,这个信息是A发出的(不是别人),且是发给B的,只

python RSA 加密与签名

PyCrypto装起来就简单多了,我是直接 sudo easy_install pycrypto 直接搞定的 先生成rsa的公私钥:打开控制台,输入 openssl 再输入 genrsa -out private.pem 1024 来生成私钥接着输入 rsa -in private.pem -pubout -out public.pem 来生成公钥 $ cat private.pem-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQDKoeRzRVf8Wo

RSA 加密验证签名

package com.example.rsa; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SignatureExceptio

一篇搞定RSA加密与SHA签名|与Java完全同步

看到这篇文章的同学可幸福了,当时在做RSA加密与签名的时候网上的资料简直不要太老,做完后实在是忍受不下去了,这篇文章我会详细讲解iOS如何实现RSA加密与签名,并且与Java完全同步,这是我的第二篇博客,若有什么不足之处还请大家指教. 基础知识 什么是RSA? 答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名. RSA加密中padding? 答:padding即填充方式,由于RSA加密算法中要加密的明文是要比模数小的,padding就是通过一些填充

C#自定义RSA加密解密及RSA签名和验证类实例

本文实例讲述了C#自定义RSA加密解密及RSA签名和验证类.分享给大家供大家参考.具体分析如下: 这个C#类自定义RSA加密解密及RSA签名和验证,包含了RSA加密.解密及签名所需的相关函数,带有详细的注释说明. using System; using System.Text; using System.Security.Cryptography; namespace DotNet.Utilities { /// <summary> /// RSA加密解密及RSA签名和验证 /// </

RSA加密、解密、签名、验签 DSA签名、验签

重要的事情说三遍,该篇文章主要是验证JAVA的RSA签名.验签的测试代码,主要代码参考 http://xw-z1985.iteye.com/blog/1837376 重要的事情说三遍,该篇文章主要是验证JAVA的RSA签名.验签的测试代码,主要代码参考 http://xw-z1985.iteye.com/blog/1837376 重要的事情说三遍,该篇文章主要是验证JAVA的RSA签名.验签的测试代码,主要代码参考 http://xw-z1985.iteye.com/blog/1837376 下