RSA加密算法的java实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

packagecom.encryp;importjava.security.MessageDigest;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;publicclassCoder{publicstaticfinalStringKEY_SHA=SHA;publicstaticfinalStringKEY_MD5=MD5;/***BASE64解密*@paramkey*@return*@throwsException*/publicstaticbyte[]decryptBASE64(Stringkey)throwsException{return(newBASE64Decoder()).decodeBuffer(key);}/***BASE64加密*@paramkey*@return*@throwsException*/publicstaticStringencryptBASE64(byte[]key)throwsException{return(newBASE64Encoder()).encodeBuffer(key);}/***MD5加密*@paramdata*@return*@throwsException*/publicstaticbyte[]encryptMD5(byte[]data)throwsException{MessageDigestmd5=MessageDigest.getInstance(KEY_MD5);md5.update(data);returnmd5.digest();}/***SHA加密*@paramdata*@return*@throwsException*/publicstaticbyte[]encryptSHA(byte[]data)throwsException{MessageDigestsha=MessageDigest.getInstance(KEY_SHA);sha.update(data);returnsha.digest();}}packagecom.encryp;importjava.security.Key;importjava.security.KeyFactory;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.PrivateKey;importjava.security.PublicKey;importjava.security.Signature;importjava.security.interfaces.RSAPrivateKey;importjava.security.interfaces.RSAPublicKey;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.spec.X509EncodedKeySpec;importjava.util.HashMap;importjava.util.Map;importjavax.crypto.Cipher;publicclassRsaUtilextendsCoder{publicstaticfinalStringKEY_ALGORTHM=RSA;publicstaticfinalStringSIGNATURE_ALGORITHM=MD5withRSA;publicstaticfinalStringPUBLIC_KEY=RSAPublicKey;//公钥publicstaticfinalStringPRIVATE_KEY=RSAPrivateKey;//私钥/***初始化密钥**@return*@throwsException*/publicstaticMapString,ObjectinitKey()throwsException{KeyPairGeneratorkeyPairGenerator=KeyPairGenerator.getInstance(KEY_ALGORTHM);keyPairGenerator.initialize(1024);KeyPairkeyPair=keyPairGenerator.generateKeyPair();//公钥RSAPublicKeypublicKey=(RSAPublicKey)keyPair.getPublic();//私钥RSAPrivateKeyprivateKey=(RSAPrivateKey)keyPair.getPrivate();MapString,ObjectkeyMap=newHashMapString,Object(2);keyMap.put(PUBLIC_KEY,publicKey);keyMap.put(PRIVATE_KEY,privateKey);returnkeyMap;}/***取得公钥,并转化为String类型**@paramkeyMap*@return*@throwsException*/publicstaticStringgetPublicKey(MapString,ObjectkeyMap)throwsException{Keykey=(Key)keyMap.get(PUBLIC_KEY);returnencryptBASE64(key.getEncoded());}/***取得私钥,并转化为String类型**@paramkeyMap*@return*@throwsException*/publicstaticStringgetPrivateKey(MapString,ObjectkeyMap)throwsException{Keykey=(Key)keyMap.get(PRIVATE_KEY);returnencryptBASE64(key.getEncoded());}/***用私钥加密**@paramdata*加密数据*@paramkey*密钥*@return*@throwsException*/publicstaticbyte[]encryptByPrivateKey(byte[]data,Stringkey)throwsException{//解密密钥byte[]keyBytes=decryptBASE64(key);//取私钥PKCS8EncodedKeySpecpkcs8EncodedKeySpec=newPKCS8EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORTHM);KeyprivateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);//对数据加密Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE,privateKey);returncipher.doFinal(data);}/***用私钥解密**@paramdata*加密数据*@paramkey*密钥*@return*@throwsException*/publicstaticbyte[]decryptByPrivateKey(byte[]data,Stringkey)throwsException{//对私钥解密byte[]keyBytes=decryptBASE64(key);PKCS8EncodedKeySpecpkcs8EncodedKeySpec=newPKCS8EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORTHM);KeyprivateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);//对数据解密Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE,privateKey);returncipher.doFinal(data);}/***用公钥加密**@paramdata*加密数据*@paramkey*密钥*@return*@throwsException*/publicstaticbyte[]encryptByPublicKey(byte[]data,Stringkey)throwsException{//对公钥解密byte[]keyBytes=decryptBASE64(key);//取公钥X509EncodedKeySpecx509EncodedKeySpec=newX509EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORTHM);KeypublicKey=keyFactory.generatePublic(x509EncodedKeySpec);//对数据解密Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE,publicKey);returncipher.doFinal(data);}/***用公钥解密**@paramdata*加密数据*@paramkey*密钥*@return*@throwsException*/publicstaticbyte[]decryptByPublicKey(byte[]data,Stringkey)throwsException{//对私钥解密byte[]keyBytes=decryptBASE64(key);X509EncodedKeySpecx509EncodedKeySpec=newX509EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORTHM);KeypublicKey=keyFactory.generatePublic(x509EncodedKeySpec);//对数据解密Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE,publicKey);returncipher.doFinal(data);}/***用私钥对信息生成数字签名**@paramdata*//加密数据*@paramprivateKey*//私钥*@return*@throwsException*/publicstaticStringsign(byte[]data,StringprivateKey)throwsException{//解密私钥byte[]keyBytes=decryptBASE64(privateKey);//构造PKCS8EncodedKeySpec对象PKCS8EncodedKeySpecpkcs8EncodedKeySpec=newPKCS8EncodedKeySpec(keyBytes);//指定加密算法KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORTHM);//取私钥匙对象PrivateKeyprivateKey2=keyFactory.generatePrivate(pkcs8EncodedKeySp

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功