昨天外包安卓的那个人说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, zeroIv,zeroIv就是初始化向量,一个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*2+1), 16);

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

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

}

return result;

}最后我想说一下,花了积分最后还是解决不了互通。我仅仅想说不带这样骗积分的。

java android aes加密解密_AES加密解密在JAVA和ANDROID下互通相关推荐

  1. jmeter 加密解密_AES加密的安全问题

    aes加密简介 AES算法全称Advanced Encryption Standard,是DES算法的替代者,旨在取代DES成为广泛使用的标准,于2001年11月26日发布于FIPS PUB 197, ...

  2. lua java 加密解密_AES加解密多版本(GO、JAVA、Python)实现

    [TOC] 异构系统基于RESTful接口加解密 环境:GO1.8/JDK1.8/Python2.7 GO示例 package common import ( "crypto/aes&quo ...

  3. aes key长度_AES加密(1): 基本AES算法

    简介 AES原本指的是一套标准FIPS 197,而AES算法一般指分组大小为128bits的Rijndeal算法,由比利时学者Joan Daemen和Vincent Rijmen提出. AES与Rij ...

  4. java中aes明文长度_AES密文与明文长度的关系

    AES介绍 严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128位,密钥长度则 ...

  5. Java使用AES算法并指定密钥种子实现加密解密

    Java使用AES指定密钥实现加密解密 一.生成密钥种子 二.使用生成的密钥种子加密 三.使用生成的密钥种子解密 四.AES完整加密解密代码工具类 一.生成密钥种子 import org.apache ...

  6. Android AES 文件加密解密

    几番折磨终有结果,现将Demo整理出来... [java] view plain copy   package com.king.zjc; import java.io.File; import ja ...

  7. Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别

    Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化. Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于 ...

  8. Android AES 加密、解密

    AES加密介绍 ASE 加密.解密的关键在于秘钥.只有使用加密时使用的秘钥,才可以解密. 生成秘钥的代码网上一大堆,下面的代码可生成一个秘钥 private SecretKey generateKey ...

  9. Android AES加密解密

    AES加密算法模式有四种:ECB.CBC.CFB.OFB 要想AES加密,至少需要一个16位的密钥,如果是非ECB模式的加密,至少还得需要密钥偏移量. 下面是AES在线加密解密链接: AES在线加密解 ...

最新文章

  1. 开发者如何构建技术影响力
  2. 【BZOJ5335】【TJOI2018】—智力竞赛(floyd传递闭包+二分图匹配)
  3. 客户端检测的含义和方法
  4. php界面设置编码格式,php设置编码格式的方法
  5. TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
  6. 前端中心化管理API使用说明
  7. VMware虚拟机CentOS7 - VMnet8网络配置及常见问题解决
  8. Android LinkedList的部分源码解析
  9. 软件版本的GA、RC的具体含义
  10. vfp报表纸张设置_vfp教程之Visual Foxpro生成任意打印字段报表的实现
  11. 单片机原理及应用C语言实验,《单片机原理及应用》实验指导书.doc
  12. SpringBoot整合JavaMail---发送邮件
  13. 龙哥库他发matlab程序,编程实现四阶龙哥库塔法解方程
  14. 二十八、docker详解
  15. 某数4代cookie生成-2
  16. VB.NET中LISTVIEW控件点击列首排序问题
  17. java计算机毕业设计个人连锁民宿信息管理系统设计与开发系统(修改)源码+mysql数据库+系统+lw文档+部署
  18. seo里的长尾关键词是什么
  19. java 本地 mq_windows、linux下java连接本地MQ队列实现输入(二)
  20. 小程序——云开发数据库的数据读取出来显示到页面

热门文章

  1. iOS 的 XMPPFramework 简介
  2. [导入]Visual Studio 2005 Team Edition软件架构系列课程(1): 概述
  3. linux的基础知识——shell基础
  4. springboot前后端分离项目MultipartFile获取前端传的file为null问题
  5. 【剑指offer】面试题38:字符串的排列(Java)
  6. Leetcode--135. 发糖果
  7. php session 前缀,PHP文件包含--session
  8. html右侧分为两个框架,html – 两个框架一个滚动条
  9. php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?
  10. qt mysql 系统时间_使用QT和参数在SQLite数据库中插入日期时间