資源簡介
RSAUtil工具類
代碼片段和文件信息
package?com.chinaums.utils;
import?org.apache.commons.codec.binary.base64;
import?javax.crypto.Cipher;
import?java.security.*;
import?java.security.spec.PKCS8EncodedKeySpec;
import?java.security.spec.X509EncodedKeySpec;
import?java.util.HashMap;
import?java.util.Map;
/**
?*?RSA工具類
?*/
public?class?RSAUtil?{
????public?static?final?String?KEY_ALGORITHM?=?“RSA“;
????public?static?final?String?SIGNATURE_ALGORITHM?=?“MD5withRSA“;
????private?static?final?String?PUBLIC_KEY?=?“RSAPublicKey“;
????private?static?final?String?PRIVATE_KEY?=?“RSAPrivateKey“;
????public?static?byte[]?decryptbase64(String?key)?{
????????return?base64.decodebase64(key);
????}
????public?static?String?encryptbase64(byte[]?bytes)?{
????????return?base64.encodebase64String(bytes);
????}
????public?static?String?sign(byte[]?data?String?privateKey)?throws?Exception?{
????????//?解密由base64編碼的私鑰
????????byte[]?keyBytes?=?decryptbase64(privateKey);
????????//?構造PKCS8EncodedKeySpec對象
????????PKCS8EncodedKeySpec?pkcs8KeySpec?=?new?PKCS8EncodedKeySpec(keyBytes);
????????//?KEY_ALGORITHM?指定的加密算法
????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);
????????//?取私鑰匙對象
????????PrivateKey?priKey?=?keyFactory.generatePrivate(pkcs8KeySpec);
????????//?用私鑰對信息生成數字簽名
????????Signature?signature?=?Signature.getInstance(SIGNATURE_ALGORITHM);
????????signature.initSign(priKey);
????????signature.update(data);
????????return?encryptbase64(signature.sign());
????}
????public?static?boolean?verify(byte[]?data?String?publicKey?String?sign)?throws?Exception?{
????????//?解密由base64編碼的公鑰
?????????byte[]?keyBytes?=?decryptbase64(publicKey);
????????//?構造X509EncodedKeySpec對象
?????????X509EncodedKeySpec?keySpec?=?new?X509EncodedKeySpec(keyBytes);
????????//?KEY_ALGORITHM?指定的加密算法
?????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);
????????//?取公鑰匙對象
?????????PublicKey?pubKey?=?keyFactory.generatePublic(keySpec);
?????????Signature?signature?=?Signature.getInstance(SIGNATURE_ALGORITHM);
?????????signature.initVerify(pubKey);?signature.update(data);
????????//?驗證簽名是否正常
?????????return?signature.verify(decryptbase64(sign));
????????}
????public?static?byte[]?decryptByPrivateKey(byte[]?data?String?key)?throws?Exception{
????????//?對密鑰解密
?????????byte[]?keyBytes?=?decryptbase64(key);
????????//?取得私鑰
?????????PKCS8EncodedKeySpec?pkcs8KeySpec?=?new?PKCS8EncodedKeySpec(keyBytes);
?????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);
?????????Key?privateKey?=?keyFactory.generatePrivate(pkcs8KeySpec);
????????//?對數據解密
?????????Cipher?cipher?=?Cipher.getInstance(keyFactory.getAlgorithm());
?????????cipher.init(Cipher.DECRYPT_MODE?privateKey);
?????????return?cipher.doFinal(data);
?????????
- 上一篇:java語言程序設計1-10章課后答案代碼
- 下一篇:socket傳輸字節和字符串
評論
共有 條評論