非对称加密也加公钥加密,不对称算法使用一对密钥对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能解开(可用于加密);同时,使用私钥加密的数据,只有公钥能解开(签名)。但是速度很慢(比私钥加密慢100到1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman等
import java.security.KeyPair;
import java.security.KeyPairGenerator; import javax.crypto.Cipher; public class PublicTest {
public static void main(String[] args) throws Exception {
byte[] srcText = "public key encryption test".getBytes("UTF8");
// 构成一个RSA密钥
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key = keyGen.generateKeyPair();
// 获得一个RSA的Cipher类,使用公鈅加密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
System.out.println(" " + cipher.getProvider().getInfo());
cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
byte[] cipherText = cipher.doFinal(srcText);
System.out.println(new String(cipherText, "UTF8"));
// 使用私鈅解密
cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
byte[] newPlainText = cipher.doFinal(cipherText);
System.out.println(new String(newPlainText, "UTF8"));
}
}