不可逆加密:MD5
输入明文后由系统直接经过加密算法处理成密文,无法根据密文推算出明文
对称加密:AES
双方都持有密钥
通过一个密钥进行加密和解密
明文 <-> 密钥 <-> 密文
非对称加密:RSA
- 原理
生成私钥,公钥对
一方都持有私钥,一方持有公钥,泄露风险小
你只要想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;
同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
RSA公钥加密对填充有“ 0”和一串随机位的消息进行加密。
在此过程中,通过加密哈希和XOR运算将随机字符串“隐藏”在密文中。
解密时,RSA解密从密文中恢复随机字符串,并使用它来恢复消息。
这就是为什么同一文本消息使用相同公钥多次加密会得到不同的结果的原因
- 使用
通过字节数组(二进制文件)得到key对象
publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(byteArray));
通过cipher对象加密
cipher.init(Cipher.ENCRYPT_MODE, pubKey)
通过字节数组(二进制文件)密钥得到string形式的密钥
new String(Base64.encodeBase64(byteArray),CharacterEncodings.CHARSET_UTF_8)
string形式的密钥转换为字节数组(二进制文件)
byte[] decoded = Base64.decodeBase64(publicKeyString);
PublicKey pubKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));