日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 在线rsa解密_通用的Java RSA加密工具类,可在线验证通过

發(fā)布時(shí)間:2025/4/16 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 在线rsa解密_通用的Java RSA加密工具类,可在线验证通过 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/**

* RSA加密工具類

* 使用PKCS1_PADDING填充,密鑰長度1024

* 加解密結(jié)果在這里測試通過:http://tool.chacuo.net/cryptrsaprikey

* 注意加密內(nèi)容的編碼要一致,統(tǒng)一UTF-8比較好

* @author daxi

*/

public class RSAUtil {

public static final String KEY_ALGORTHM="RSA";

public static final String SIGNATURE_ALGORITHM="MD5withRSA";

public static final String PUBLIC_KEY = "RSAPublicKey";//公鑰

public static final String PRIVATE_KEY = "RSAPrivateKey";//私鑰

/**

* 初始化密鑰

* RSA加密解密的實(shí)現(xiàn),需要有一對(duì)公私密鑰,公私密鑰的初始化如下

* 非對(duì)稱加密一般都用于加密對(duì)稱加密算法的密鑰,而不是直接加密內(nèi)容

* @return

* @throws Exception

*/

public static Map initKey()throws Exception{

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORTHM);

keyPairGenerator.initialize(1024);

KeyPair keyPair = keyPairGenerator.generateKeyPair();

//公鑰

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

//私鑰

RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

Map keyMap = new HashMap(2);

keyMap.put(PUBLIC_KEY, publicKey);

keyMap.put(PRIVATE_KEY, privateKey);

return keyMap;

}

/**

* 取得公鑰,并轉(zhuǎn)化為String類型

* @param keyMap

* @return

* @throws Exception

*/

public static String getPublicKey(Map keyMap)throws Exception{

Key key = (Key) keyMap.get(PUBLIC_KEY);

return Coder.encryptBASE64(key.getEncoded());

}

/**

* 取得私鑰,并轉(zhuǎn)化為String類型

* @param keyMap

* @return

* @throws Exception

*/

public static String getPrivateKey(Map keyMap) throws Exception{

Key key = (Key) keyMap.get(PRIVATE_KEY);

return Coder.encryptBASE64(key.getEncoded());

}

/**

* 用私鑰加密

* @param data加密數(shù)據(jù)

* @param key密鑰

* @return

* @throws Exception

*/

public static byte[] encryptByPrivateKey(byte[] data,String key)throws Exception{

//解密密鑰

byte[] keyBytes = Coder.decryptBASE64(key);

//取私鑰

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);

Key privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

//對(duì)數(shù)據(jù)加密

Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

cipher.init(Cipher.ENCRYPT_MODE, privateKey);

return cipher.doFinal(data);

}

/**

* 用私鑰解密 * @param data 加密數(shù)據(jù)

* @param key密鑰

* @return

* @throws Exception

*/

public static byte[] decryptByPrivateKey(byte[] data,String key)throws Exception{

//對(duì)私鑰解密

byte[] keyBytes = Coder.decryptBASE64(key);

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);

Key privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

//對(duì)數(shù)據(jù)解密

Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

cipher.init(Cipher.DECRYPT_MODE, privateKey);

return cipher.doFinal(data);

}

/**

* 用公鑰加密

* @param data加密數(shù)據(jù)

* @param key密鑰

* @return

* @throws Exception

*/

public static byte[] encryptByPublicKey(byte[] data,String key)throws Exception{

//對(duì)公鑰解密

byte[] keyBytes = Coder.decryptBASE64(key);

//取公鑰

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);

Key publicKey = keyFactory.generatePublic(x509EncodedKeySpec);

//對(duì)數(shù)據(jù)解密

Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

return cipher.doFinal(data);

}

/**

* 用公鑰解密

* @param data加密數(shù)據(jù)

* @param key密鑰

* @return

* @throws Exception

*/

public static byte[] decryptByPublicKey(byte[] data,String key)throws Exception{

//對(duì)私鑰解密

byte[] keyBytes = Coder.decryptBASE64(key);

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);

Key publicKey = keyFactory.generatePublic(x509EncodedKeySpec);

//對(duì)數(shù)據(jù)解密

Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

cipher.init(Cipher.DECRYPT_MODE, publicKey);

return cipher.doFinal(data);

}

/**************************************************************************

* 通過RSA加密解密算法,我們可以實(shí)現(xiàn)數(shù)字簽名的功能。我們可以用私鑰對(duì)信息生

* 成數(shù)字簽名,再用公鑰來校驗(yàn)數(shù)字簽名,當(dāng)然也可以反過來公鑰簽名,私鑰校驗(yàn)。

* *************************************************************************/

/**

*用私鑰對(duì)信息生成數(shù)字簽名

* @param data//加密數(shù)據(jù)

* @param privateKey//私鑰

* @return

* @throws Exception

*/

public static String sign(byte[] data,String privateKey)throws Exception{

//解密私鑰

byte[] keyBytes = Coder.decryptBASE64(privateKey);

//構(gòu)造PKCS8EncodedKeySpec對(duì)象

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);

//指定加密算法

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);

//取私鑰匙對(duì)象

PrivateKey privateKey2 = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

//用私鑰對(duì)信息生成數(shù)字簽名

Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);

signature.initSign(privateKey2);

signature.update(data);

return Coder.encryptBASE64(signature.sign());

}

/**

* 校驗(yàn)數(shù)字簽名

* @param data加密數(shù)據(jù)

* @param publicKey公鑰

* @param sign數(shù)字簽名

* @return

* @throws Exception

*/

public static boolean verify(byte[] data,String publicKey,String sign)throws Exception{

//解密公鑰

byte[] keyBytes = Coder.decryptBASE64(publicKey);

//構(gòu)造X509EncodedKeySpec對(duì)象

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);

//指定加密算法

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);

//取公鑰匙對(duì)象

PublicKey publicKey2 = keyFactory.generatePublic(x509EncodedKeySpec);

Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);

signature.initVerify(publicKey2);

signature.update(data);

//驗(yàn)證簽名是否正常

return signature.verify(Coder.decryptBASE64(sign));

}

public static void main(String[] args) throws Exception {

// 生產(chǎn)密鑰

Map keys = RSAUtil.initKey();

// 打印私鑰

System.out.println("↓↓↓↓↓the following is private key↓↓↓↓↓");

System.out.println("-----BEGIN PRIVATE KEY-----");

System.out.println(RSAUtil.getPrivateKey(keys));

System.out.println("-----END PRIVATE KEY-----");

System.out.println("↑↑↑↑↑the above is private key↑↑↑↑↑");

System.out.println();

// 打印公鑰

System.out.println("↓↓↓↓↓the following is public key↓↓↓↓↓");

System.out.println("-----BEGIN PUBLIC KEY-----");

System.out.println(RSAUtil.getPublicKey(keys));

System.out.println("-----END PUBLIC KEY-----");

System.out.println("↑↑↑↑↑the above is public key↑↑↑↑↑");

// 加密樣例:

// File file1 = new File("E:\\pub-key.txt");

// String pub = IOUtils.toString(new FileInputStream(file1));

// pub = pub.replace("-----BEGIN PUBLIC KEY-----" + IOUtils.LINE_SEPARATOR, "").replace("-----END PUBLIC KEY-----", "");

// byte[] helloE = RSAUtil.encryptByPublicKey("hello".getBytes("UTF-8"), pub);

// String helloBase64 = Coder.encryptBASE64(helloE);

// System.out.println(helloBase64);

// // 解密樣例

// String naughty = "DuuB+ZcqSMTL2PVzOIaHtLDQ5t0r+S2twsAdNt7GNjD1AGVPpiiQz/fVfVJa9+j3IeWzAKTZ/cRyLTH8Wv5JTD6PTMWwiBvg+eGoQZzTi/b34U/Aiv/DovIzm8uMTM2iWk1Vz7KUJK0NMnlKIiviJneCyUVCMFLwT2OPH1QBxq4=";

// byte[] naughtyBase64 = Coder.decryptBASE64(naughty);

// File file = new File("E:\\pri-key.txt");

// String priKey = IOUtils.toString(new FileInputStream(file));

// priKey = priKey.replace("-----BEGIN PRIVATE KEY-----" + IOUtils.LINE_SEPARATOR, "").replace("-----END PRIVATE KEY-----", "");

// String decryptedNaughty = new String(RSAUtil.decryptByPrivateKey(naughtyBase64, priKey));

// System.out.println(decryptedNaughty);

}

}

總結(jié)

以上是生活随笔為你收集整理的java 在线rsa解密_通用的Java RSA加密工具类,可在线验证通过的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。