非对称密码:加密密钥和解密密钥不相同,一个公开,一个保密。公开的称为公钥,保密称为私钥
在非对称密码体制中,公钥和私钥都可以用于加密与解密操作,公钥加密则需要私钥解密,私钥加密则需要公钥解密。非对称密码体制的主要优点是可以适应开放性的使用环境,可以方便安全的实现数字签名和验证。除此之外,非对称密码体制还支持数字信封等技术。
DH:第一个密钥协商算法,使双方可以在安全的条件下交换密钥,仅用于秘钥分配不能加密或解密消息。
重点:乙方使用甲方公钥作为参数,否则无法保证甲乙双方获得同一个秘密密钥。
RSA:最典型的非对称 加密算法,既可用于数据加解密也可用于数字签名。
ECC:椭圆曲线加密算法,通过椭圆曲线方程式的性质产生密钥,创建密钥时更快更小更有效。
X509EncodedKeySpec和PKCS8EncodedKeySpec两个类在加密解密环节中经常会用到。密钥很可能会以二进制方式存储于文件中,由程序来读取。这时候,就需要通过这两个类将文件中的字节数组读出转换为密钥对象。
// 取得私钥
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 取得公钥
// 构造X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// 取公钥匙对象
PublicKey pubKey = keyFactory.generatePublic(keySpec);
简要总结一下,使用公钥加密、私钥解密,完成了乙方到甲方的一次数据传递,通过私钥加密、公钥解密,同时通过私钥签名、公钥验证签名,完成了一次甲方到乙方的数据传递与验证,两次数据传递完成一整套的数据交互