无锡企业免费建站,高端网站建设,恩愉科技,宁波外贸订单外发加工,市场推广计划方案模板昨天外包安卓的那个人说AES的加解密结果不一样。于是百度搜索发现还真是!贴上AES加密核心#xff1a;Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding);cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);CBC是工作模式#xff0c;AES一共同拥有电子passw…昨天外包安卓的那个人说AES的加解密结果不一样。于是百度搜索发现还真是!贴上AES加密核心Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding);cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);CBC是工作模式AES一共同拥有电子password本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种模式。PKCS5Padding是填充模式还有其他的填充模式然后cipher.init()一共同拥有三个參数Cipher.ENCRYPT_MODE,key, zeroIvzeroIv就是初始化向量一个8为字符数组。工作模式、填充模式、初始化向量这三种因素一个都不能少。否则假设你不指定的话。那么就要程序就要调用默认实现。知道原因就好办各种调试測试之后完毕AES在JAVA和安桌互通。现贴上核心代码/** 填充模式 */private static final String transformation AES/CBC/PKCS5Padding;/*** 加密** param content 须要加密的内容* param password 加密密码* return*/public static String encrypt(String content, String password) {try {IvParameterSpec zeroIv new IvParameterSpec(password.getBytes());SecretKeySpec key1 new SecretKeySpec(password.getBytes(),AES);Cipher cipher Cipher.getInstance(transformation);cipher.init(Cipher.ENCRYPT_MODE, key1, zeroIv);byte[] encryptedData cipher.doFinal(content.getBytes());String encryptResultStr parseByte2HexStr(encryptedData);return encryptResultStr;} catch (Exception e) {e.printStackTrace();}return null;}/*** 解密** param content 待解密内容* param password 解密密钥* return*/public static String decrypt(String content, String password) {try {byte[] decryptFrom parseHexStr2Byte(content);IvParameterSpec zeroIv new IvParameterSpec(password.getBytes());SecretKeySpec key1 new SecretKeySpec(password.getBytes(),AES);Cipher cipher Cipher.getInstance(transformation);cipher.init(Cipher.DECRYPT_MODE, key1, zeroIv);byte decryptedData[] cipher.doFinal(decryptFrom);return new String(decryptedData);} catch (Exception e) {e.printStackTrace();}return null;}/**将二进制转换成16进制* param buf* return*/public static String parseByte2HexStr(byte buf[]) {StringBuffer sb new StringBuffer();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*21), 16);int low Integer.parseInt(hexStr.substring(i*21, i*22), 16);result[i] (byte) (high * 16 low);}return result;}最后我想说一下花了积分最后还是解决不了互通。我仅仅想说不带这样骗积分的。