读书人

非对称加密 (公钥加密私钥解密或许公

发布时间: 2012-10-25 10:58:57 作者: rapoo

非对称加密 (公钥加密私钥解密或者公钥解密私钥加密)

非对称加密

?

非对称加密有一对密钥,公钥和私钥。可以用公钥加密,也可以用私钥加密。不过,公钥加密必须用私钥解密,私钥加密必须用公钥解密。如果不对应,则会报这样的异常

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)));}}

读书人网 >编程

热点推荐