【Java-加密算法】对称加密、非对称加密、单向散列(转)

时间:2021-10-01 06:18:35

一提到加密,就会联想到数字签名,这两个经常被混淆的概念到底是什么呢?

加密:加密是一种以密码方式发送信息的方法。只有拥有正确密钥的人才能解开这个信息的密码。对于其他人来说,这个信息看起来就像是一系列随机的字母、数字和符号。如果你要发送不应该让其他人看的敏感信息时,加密是特别重要的。

数字签名:数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

加密与数字签名的区别

加密同数字签名一样,公共密钥加密使用PGP等软件,使用数学算法转换信息并且依靠公共和专用密钥。但是,加密和数字签名是有区别的,加密的目的是通过把信息翻译成密码秘密地隐藏内容。数字签名的目的是完整性和身份识别性,验证一个信息的发送者和指出内容没有被修改。虽然加密和数字签名能够单独使用,但是,你还可以对加密的信息采用数字签名。

当你签署一个信息时,你使用你的专用密钥,任何有你的公共密钥的人都能够验证这个签名是合法的。当你加密一个信息的时候,你为接收你的信息的人使用这个公共密钥,并且使用他或者她的专用密钥解码这个信息。用于人们要保持自己的专用密钥的机密,并且使用口令保护这些密钥,这个信息的接收者应该是惟一的能够观看这个信息的人。


算法分类

一、单向散列算法: 属于摘要算法,不是一种加密算法,作用是把任意长的输入消息串变化成固定长的输出串的一种函数

BASE64(严格地说,属于编码格式,而非加密算法)

MD5(Message Digest algorithm 5,信息摘要算法)

SHA(Secure Hash Algorithm,安全散列算法)

HMAC(Hash Message Authentication Code,散列消息鉴别码)

CRC(Cyclical Redundancy Check,循环冗余码校验)

二、对称加密算法: 加密密钥与解密密钥相同

DES(Data Encryption Standard,数据加密标准算法)

AES(Advanced Encryption Standard,高级加密标准)

PBE(Password-based encryption,基于密码验证)

RC5(参数可变的分组密码算法 )

BLOWFISH(对称密钥分组加密算法)

三、非对称加密算法 :加密密钥与解密密钥不相同

RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

DH(Diffie-Hellman算法,密钥一致协议)

Elgamal(既能用于数据加密也能用于数字签名)

DSA(Digital Signature Algorithm,数字签名)

ECC(Elliptic Curves Cryptography,椭圆曲线算法)

Merkle-Hellman(背包算法)

Miller Rabin算法(素数测试算法)


参考资料