编码与加密
编码
编码(encode)是信息从一种形式或格式转换为另一种形式的过程。相应的,解码(decode)是编码的逆过程。
常见的编码算法有 ASCII 编码、URL 编码、HTML 编码、Base64 编码等。
加密
加密(encryption)是将明文(plaintext,cleartext)信息改变为难以读取的密文(ciphertext)内容,使之不可读。只有拥有解密方法的对象,经由解密(decryption)过程,才能将密文还原为正常可读的内容。
现代密码学中的加密算法可以分为两类:对称加密(Symmetric encryption)和非对称加密(Asymmetric encryption)。
对称加密就是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。
非对称加密,又称公开密钥加密,是加密和解密使用不同密钥的算法,一个是公开密钥,一个是私有密钥,一个用作加密的时候,另一个则用作解密,虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个。在通信中,加密通常使用的是对方的公钥,当对方收到密文后可以使用自己的私钥解密。如果加密使用的是自己的私钥,则密文可由任何人解密,由此可验证该文件必定出自该用户,这亦称作数字签名(Digital Signature)。
跑题一下,实际上为了性能,数字签名并不是直接使用私钥加密明文,而是使用私钥加密明文的哈希值。
常见的对称加密算法有 DES、3DES、AES、RC5 等。
常见的非对称加密算法有 RSA、DSA、ECDSA、Elgamal 等。
非对称加密在计算上相当复杂,速度远远比不上对称加密,因此,在一般实际情况下,往往通过非对称加密来随机创建临时的对称密钥,亦即对话键,然后才通过对称加密来传输大量、主体的数据。
加密算法实质上是密码算法中的一种,另一种则是哈希(hash)算法。
哈希
哈希算法,又称为散列算法,就是把任意长度的输入变换成固定长度的输出,是一种不可逆的算法,也就是说不能通过密文(即哈希值)反算出明文,这是一种单向加密的算法。另外,多个不同的明文可能会得到同一个密文,因为值域是有限的,这种情况称为冲突。一个优秀的哈希算法会尽量的减少这种冲突性。
常见的哈希算法有 MD5、SHA-1、SHA-256、CRC-32、CRC-64 等。
注意:
- 密码学建议,不要使用任何自己创造的私有加密算法,应该使用广泛使用的公开加密算法,这些都是已被证明安全的。
- 编码与加密主要的区别在于,所用的 Key 是否是公共所知的,或者说,编码根本就没有 Key。