非对称加密 (公钥加密私钥解密或者公钥解密私钥加密)
非对称加密
?
非对称加密有一对密钥,公钥和私钥。可以用公钥加密,也可以用私钥加密。不过,公钥加密必须用私钥解密,私钥加密必须用公钥解密。如果不对应,则会报这样的异常
javax.crypto.BadPaddingException: Data must start with zero
?
?
代码如下:
?
import java.security.KeyPair;import java.security.KeyPairGenerator;import javax.crypto.Cipher;public class test1 {//公钥加密public byte[] PublicEncrypt(KeyPair key,String str)throws Exception { Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); return cipher.doFinal(str.getBytes("UTF8"));}//公钥解密public byte[] PublicDECRYPT (KeyPair key,byte[] data)throws Exception { Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.DECRYPT_MODE, key.getPublic()); return cipher.doFinal(data);}//私钥加密public byte[] PrivateEncrypt (KeyPair key,String str)throws Exception { Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, key.getPrivate()); return cipher.doFinal(str.getBytes("UTF8"));}//私钥解密public byte[] PrivateDECRYPT(KeyPair key,byte[] data)throws Exception { Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.DECRYPT_MODE, key.getPrivate()); return cipher.doFinal(data);} public static void main(String args[]) throws Exception {String str = "Hello World!";KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key = keyGen.generateKeyPair();test1 t = new test1();System.out.println("加密前原文:"+str);byte[] data = t.PublicEncrypt(key,str); System.out.println("私钥解密后:"+new String(t.PrivateDECRYPT(key,data)));byte[] data1 = t.PrivateEncrypt(key,str); System.out.println("公钥解密后:"+new String(t.PublicDECRYPT(key,data1)));}}