1、可逆与不可逆
对数据A进行算法F加密后,生成的密文B如果还能还原为数据A,则算法F为可逆加密算法,否则为不可逆加密算法。
MD5、SHA256、CRC32等哈希算法为不可逆算法,它们将任意长度的数据总是生成固定短小长度的密文。通常用来验证数据是否被修改,下载的软件是否损坏等。
AES、RSA、ECC等算法为可逆算法,通过“密钥”生成的密文能够再次使用“密钥”还原为原数据,生成的数据比原文大得多。通常用来加密数据。
2、对称加密与非对称加密
对称加密算法的加密与解密使用相同的密钥,速度比较快,但如何安全的传递密钥成为了一个问题。非对称加密算法则分别为加密和解密提供成对的不同密钥——私钥和公钥,通过公钥加密的数据只能使用对应的私钥解密,速度比较慢,不适合大量数据加密。
通常用户甲使用非对称算法生成私钥和公钥,然后将公钥传递给用户乙。用户乙使用对称加密算法生成密钥A,使用公钥将密钥A加密生成密文M,将密文M传递给用户甲。用户甲使用私钥将密文M还原为密钥A,至此安全的传递密钥的步骤完成,之后双方的数据交换都使用密钥A进行对称加密。
3、数字签名
数字签名是为了证明数据是由你编写且没有被篡改,大多数网站和软件都在使用数字签名。流程是将数据通过哈希算法(例如SHA256)生成摘要,然后你使用私钥将摘要加密生成数字签名A。其他人将你公开的公钥将数字签名A解密为摘要A,然后使用同样的哈希算法将数据生成摘要B,最后对比摘要A与摘要B是否相同。
4、实现
OpenSSL提供了各种常见的的加密算法实现,源码的demos中也提供了编程示例。