資源簡介
RSA非對稱加密,指定一個密碼種子,使用該密碼種子用java生成密鑰對,并把公鑰分發(fā)到客戶端(瀏覽器),保存密碼種子;JS采用公鑰對重要信息進行加密,然后傳回后臺,取出密碼種子重新生成密碼對,使用私鑰對密文進行解密。要保證密碼對的安全就必須保證密碼種子的不可預知性。

代碼片段和文件信息
package?org.common.util;
import?java.security.InvalidParameterException;
import?java.security.KeyFactory;
import?java.security.KeyPair;
import?java.security.KeyPairGenerator;
import?java.security.NoSuchAlgorithmException;
import?java.security.PrivateKey;
import?java.security.Provider;
import?java.security.SecureRandom;
import?java.security.interfaces.RSAPrivateKey;
import?java.security.interfaces.RSAPublicKey;
import?javax.crypto.Cipher;
import?org.apache.commons.lang3.StringUtils;
import?org.bouncycastle.jce.provider.BouncyCastleProvider;
import?org.bouncycastle.util.encoders.Hex;
/**
?*?RSA算法加密/解密工具類。
?*?
?*?@author?Administrator
?*?
?*/
public?class?RSA?{
/**?算法名稱?*/
private?static?final?String?ALGORITHOM?=?“RSA“;
/**?密鑰大小?*/
private?static?final?int?KEY_SIZE?=?1024;
/**?默認的安全服務提供者?*/
private?static?final?Provider?DEFAULT_PROVIDER?=?new?BouncyCastleProvider();
private?static?KeyPairGenerator?keyPairGen?=?null;
private?static?KeyFactory?keyFactory?=?null;
/**?緩存的密鑰對。?*/
private?static?KeyPair?oneKeyPair?=?null;
private?static?String?radamKey?=?““;
static?{
try?{
keyPairGen?=?KeyPairGenerator.getInstance(ALGORITHOM
DEFAULT_PROVIDER);
keyFactory?=?KeyFactory.getInstance(ALGORITHOM?DEFAULT_PROVIDER);
}?catch?(NoSuchAlgorithmException?ex)?{
ex.printStackTrace();
}
}
/**
?*?生成并返回RSA密鑰對。
?*/
private?static?synchronized?KeyPair?generateKeyPair()?{
try?{
keyPairGen.initialize(KEY_SIZE
new?SecureRandom(radamKey.getBytes()));
oneKeyPair?=?keyPairGen.generateKeyPair();
return?oneKeyPair;
}?catch?(InvalidParameterException?ex)?{
ex.printStackTrace();
}?catch?(NullPointerException?ex)?{
ex.printStackTrace();
}
return?null;
}
/**?返回已初始化的默認的公鑰。?*/
public?static?RSAPublicKey?getDefaultPublicKey()?{
KeyPair?keyPair?=?generateKeyPair();
if?(keyPair?!=?null)?{
return?(RSAPublicKey)?keyPair.getPublic();
}
return?null;
}
?/**
?????*?使用指定的私鑰解密數(shù)據(jù)。
?????*?
?????*?@param?privateKey?給定的私鑰。
?????*?@param?data?要解密的數(shù)據(jù)。
?????*?@return?原數(shù)據(jù)。
?????*/
????public?static?byte[]?decrypt(PrivateKey?privateKey?byte[]?data)?throws?Exception?{
????????Cipher?ci?=?Cipher.getInstance(ALGORITHOM?DEFAULT_PROVIDER);
????????ci.init(Cipher.DECRYPT_MODE?privateKey);
????????return?ci.doFinal(data);
????}
/**
?????*?使用默認的私鑰解密給定的字符串。
?????*?
?????*?若{@code?encrypttext}?為?{@code?null}或空字符串則返回?{@code?null}。
?????*?私鑰不匹配時,返回?{@code?null}。
?????*?
?????*?@param?encrypttext?密文。
?????*?@return?原文字符串。
?????*/
????public?static?String?decryptString(String?encrypttext)?{
????????if(StringUtils.isBlank(encrypttext))?{
????????????return?null;
????????}
????????KeyPair?keyPair?=?generateKeyPair();
????????try?{
????????????byte[]?en_data?=?Hex.decode(encrypttext);
????????????byte[]?data?=?decrypt((RSAPrivateKey)keyPair.getPrivate()?en_data);
????????????return?new?String(data);
????????}?c
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-10-16?17:07??RSA_JS_JAVA\
?????目錄???????????0??2013-06-13?22:08??RSA_JS_JAVA\RSA_JS_JAVA\
?????文件?????1598015??2009-05-01?14:12??RSA_JS_JAVA\RSA_JS_JAVA\bouncycastle.jar
?????文件?????????932??2013-06-13?22:12??RSA_JS_JAVA\RSA_JS_JAVA\readme.txt
?????文件????????1319??2013-06-10?13:10??RSA_JS_JAVA\RSA_JS_JAVA\rsa.html
?????文件????????4641??2013-06-13?22:09??RSA_JS_JAVA\RSA_JS_JAVA\RSA.java
?????文件???????19078??2012-01-11?11:59??RSA_JS_JAVA\RSA_JS_JAVA\security.js
評論
共有 條評論