java invalid int_aes 解密出现 java.lang.NumberFormatException: Invalid int: "ch"

该博客主要讨论了在使用Java进行AES加密和解密过程中遇到的问题,特别是当出现'java.lang.NumberFormatException: Invalid int: "ch"'错误时,作者提供了详细的代码实现和可能的解决方案。文章内容包括AES加密解密的实现方法,如生成密钥、加密和解密过程,以及如何处理解密异常。
摘要由CSDN通过智能技术生成

packagecom.carspeak.client.util;importjava.io.UnsupportedEncodingException;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.KeyGenerator;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.SecretKey;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;/*** AES 加密解密

*

*@authorhuqiang

**/

public classAESUtil {public staticString encrypt(String seed, String cleartext)throwsException {byte[] rawKey =getRawKey(seed.getBytes());byte[] result =encrypt(rawKey, cleartext.getBytes());returntoHex(result);

}public staticString decrypt(String seed, String encrypted)throwsException {byte[] rawKey =getRawKey(seed.getBytes());byte[] enc =toByte(encrypted);byte[] result =decrypt(rawKey, enc);return newString(result);

}private static byte[] getRawKey(byte[] seed) throwsException {

KeyGenerator kgen= KeyGenerator.getInstance("AES");

SecureRandom sr= SecureRandom.getInstance("SHA1PRNG", "Crypto");

sr.setSeed(seed);

kgen.init(128, sr); //192 and 256 bits may not be available

SecretKey skey =kgen.generateKey();byte[] raw =skey.getEncoded();returnraw;

}private static byte[] encrypt(byte[] raw, byte[] clear) throwsException {

SecretKeySpec skeySpec= new SecretKeySpec(raw, "AES");

Cipher cipher= Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec,newIvParameterSpec(new byte[cipher.getBlockSize()]));byte[] encrypted =cipher.doFinal(clear);returnencrypted;

}private static byte[] decrypt(byte[] raw, byte[] encrypted)throwsException {

SecretKeySpec skeySpec= new SecretKeySpec(raw, "AES");

Cipher cipher= Cipher.getInstance("AES");

cipher.init(Cipher.DECRYPT_MODE, skeySpec,newIvParameterSpec(new byte[cipher.getBlockSize()]));byte[] decrypted =cipher.doFinal(encrypted);returndecrypted;

}private staticString toHex(String txt) {returntoHex(txt.getBytes());

}private staticString fromHex(String hex) {return newString(toByte(hex));

}private static byte[] toByte(String hexString) {int len = hexString.length() / 2;byte[] result = new byte[len];for (int i = 0; i < len; i++)

result[i]= Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),16).byteValue();returnresult;

}private static String toHex(byte[] buf) {if (buf == null)return "";

StringBuffer result= new StringBuffer(2 *buf.length);for (int i = 0; i < buf.length; i++) {

appendHex(result, buf[i]);

}returnresult.toString();

}private final static String HEX = "0123456789ABCDEF";private static void appendHex(StringBuffer sb, byteb) {

sb.append(HEX.charAt((b>> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值