数字签名
以上三种算法都有防篡改的功能,但摘要算法、和对称加密算法若要防篡改,则需要交换密钥,这又是一件麻烦事儿。所以一般在单纯的防篡改的需求上,都是使用非对称加密算法。但若是对整个明文进行加密的话,加密过程势必消耗大量时间,所以就诞生了数字签名。
数字签名,本质上就是非对称加密算法,但出于解密运行效率的考虑,并是不对明文进行加密,而是对明文的摘要加密,生成“数字串”,并将“数字串”附在明文之后。
数字签名实际上是非对称加密算法的一个妥协方案,为了提高加解密的效率,舍弃了非对称加密算法对截获威胁的优势。
通讯模型
先来看非对称加密算法的第一种通讯模型,由客户端生成一堆密钥——公钥Gkey和私钥Skey,并使用Skey对明文data进行加密,获得密文C。将C与Gkey发送给服务器端,服务器端使用Gkey对C进行解密。
这种通讯模型,只需要一次请求/响应过程,但却无法防范截获威胁,由于最后的密文C的解密用的是公钥Gkey,而Gkey在通过网络传递,所以攻击者可以很方便的对数据进行截获、解密,获得明文data。
但这种通讯模型,对于数字签名的场景正合适,数字签名的场景并不准备防范“截获”威胁。
那么下面来看下完整的数字签名的通讯模型:服务器端生成一堆密钥,公钥Gkey和私钥Skey,在将明文data进行摘要,获得摘要串Z1,使用私钥对Z1加密,获得密文C,将C,data,Gkey发给服务器端,服务器端使用Gkey解密后获得Z1,重新根据data计算出摘要Z2,通过比较Z1是否等于Z2来判断数据是否被篡改。
以上的模型主要由两个步骤组成,摘要与非对称加密算法的应用。平常我们经常用到的签名算法,也是这两种算法的组合,比如:SHA1wthRSA,使用SHA1来做摘要,RSA做未对称加密;MD5withRSA,使用MD5做摘要算法,RSA做未对称加密;SHA1withDSA,DSA是ElGamal算法的一种改进。
相关推荐
300多种加密解密算法(C++)源代码 300多种加密解密算法(C++)源代码
用C语言实现的AES加密解密算法,用C语言实现的AES加密解密算法
字符串加密解密算法
经典代码(带详解) 函数authcode($string, $operation, $key, ...第六种 函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。
java实现MD5加密解密算法,java源代码~
DES加密解密算法的C语言实现,只要调用函数,即可实现数据的加密解密,我已经在DSP上实现。
RSA 加密解密算法C语言 (含linux)内含代码加实例
VB实现DES加密解密算法已测试通过如有更新另行发布
主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下
RSA加密解密算法 C++ 密码学 RSA加密解密算法 C++ 密码学 RSA加密解密算法 C++ 密码学
RSA加密解密算法,相当不错的例子,适合初学者参考
实现的AES加密解密算法,高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥
MD5加密解密算法描述.docMD5加密解密算法描述.docMD5加密解密算法描述.doc
加密为直接输入十六进制的(消息,密钥,1);解密为(密文,密钥,2);Index=1为加密,不为1为解密
sun java 3DES加密解密算法
加密算法模块(VC++)-算法源码吧-加密解密算法- C_C++ 加密算法必备,开拓视野和了解相关算法
此资源加密方式包括 MD2, MD5, SHA-1, HAVAL, Tiger, RIPE-MD160, MD5-MAC, HMAC, XOR-MAC, DES,IDEA, WAKE, 3-WAY, TEA, SAFER, Blowfish,SHARK, GOST, CAST-128, Square,Diamond2, Sapphire, RC2, RC5, RC6, MARS,...
主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了java RAS加密解密算法的相关实现技巧,需要的朋友可以参考下
c# 可逆 加密 解密算法
可以运行的C++版RSA加密解密算法,有注释详细