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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java解密方法,java加密,解密方法

發布時間:2024/9/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java解密方法,java加密,解密方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/**

*AES加密解密工具類

*@author M-Y

*/

public class AESUtil {

private static Logger log = LoggerFactory.getLogger(AESUtil.class);

private static final String defaultCharset = "UTF-8";

private static final String KEY_AES = "AES";

private static final String KEY = "2A3D75862E69BF61DFAD94017E930227A715C8E533AA1A12361D6";

/**

* 加密

*

* @param data 需要加密的內容

* @param key 加密密碼

* @return

*/

public static String encrypt(String data, String key) {

return doAES(data, key, Cipher.ENCRYPT_MODE);

}

/**

* 解密

*

* @param data 待解密內容

* @param key 解密密鑰

* @return

*/

public static String decrypt(String data, String key) {

return doAES(data, key, Cipher.DECRYPT_MODE);

}

/**

* 加解密

*

* @param data 待處理數據

* @param password 密鑰

* @param mode 加解密mode

* @return

*/

private static String doAES(String data, String key, int mode) {

try {

if (StringUtils.isBlank(data) || StringUtils.isBlank(key)) {

return null;

}

//判斷是加密還是解密

boolean encrypt = mode == Cipher.ENCRYPT_MODE;

byte[] content;

//true 加密內容 false 解密內容

if (encrypt) {

content = data.getBytes(defaultCharset);

} else {

content = parseHexStr2Byte(data);

}

//1.構造密鑰生成器,指定為AES算法,不區分大小寫

KeyGenerator kgen = KeyGenerator.getInstance(KEY_AES);

//2.根據ecnodeRules規則初始化密鑰生成器

/*

* 問題我已解決,這個是由于linux和window的內核不同造成的!

* SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

* secureRandom.setSeed(PASSWORD.getBytes());

* 然后初始化,就能解決這個問題!

*/

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

secureRandom.setSeed(key.getBytes());

//生成一個128位的隨機源,根據傳入的字節數組

kgen.init(128, secureRandom);

//3.產生原始對稱密鑰

SecretKey secretKey = kgen.generateKey();

//4.獲得原始對稱密鑰的字節數組

byte[] enCodeFormat = secretKey.getEncoded();

//5.根據字節數組生成AES密鑰

SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, KEY_AES);

//6.根據指定算法AES自成密碼器

Cipher cipher = Cipher.getInstance(KEY_AES);// 創建密碼器

//7.初始化密碼器,第一個參數為加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二個參數為使用的KEY

cipher.init(mode, keySpec);// 初始化

byte[] result = cipher.doFinal(content);

if (encrypt) {

//將二進制轉換成16進制

return parseByte2HexStr(result);

} else {

return new String(result, defaultCharset);

}

} catch (Exception e) {

log.error("AES 密文處理異常", e);

}

return null;

}

/**

* 將二進制轉換成16進制

*

* @param buf

* @return

*/

public static String parseByte2HexStr(byte buf[]) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i < buf.length; i++) {

String hex = Integer.toHexString(buf[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

}

/**

* 將16進制轉換為二進制

*

* @param hexStr

* @return

*/

public static byte[] parseHexStr2Byte(String hexStr) {

if (hexStr.length() < 1) {

return null;

}

byte[] result = new byte[hexStr.length() / 2];

for (int i = 0; i < hexStr.length() / 2; i++) {

int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);

int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);

result[i] = (byte) (high * 16 + low);

}

return result;

}

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

String decrypt = AESUtil.encrypt("119852292879", BusinessTypeConstant.SECRET_KEY);

System.out.println(decrypt);

String str = AESUtil.decrypt("6F47907853576C750915B9A50455285D",BusinessTypeConstant.SECRET_KEY);

System.out.println(str);

// KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");

// generator.initialize(512, new SecureRandom());

// KeyPair pair = generator.generateKeyPair();

// PublicKey pubKey = pair.getPublic();

// PrivateKey privKey = pair.getPrivate();

//

// byte[] pk = pubKey.getEncoded();

// byte[] privk = privKey.getEncoded();

//

// String strpk = new String(Base64.encodeBase64(pk));

// System.out.println("=====================生成公鑰秘鑰:"+strpk);

//

// String strppk = new String(Base64.encodeBase64(privk));

// System.out.println("=====================生成私鑰秘鑰:"+strppk);

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

// String content = "{'repairPhone':'18547854787','customPhone':'12365478965','captchav':'58m7'}";

// System.out.println("加密前:" + content);

// System.out.println("加密密鑰和解密密鑰:" + KEY);

// String encrypt = encrypt(content, KEY);

// System.out.println("加密后:" + encrypt);

// String decrypt = decrypt(encrypt, KEY);

// System.out.println("解密后:" + decrypt);

}

}

總結

以上是生活随笔為你收集整理的java解密方法,java加密,解密方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。