java android aes加密解密_AES加密解密在JAVA和ANDROID下互通
昨天外包安卓的那个人说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下互通相关推荐
- jmeter 加密解密_AES加密的安全问题
aes加密简介 AES算法全称Advanced Encryption Standard,是DES算法的替代者,旨在取代DES成为广泛使用的标准,于2001年11月26日发布于FIPS PUB 197, ...
- lua java 加密解密_AES加解密多版本(GO、JAVA、Python)实现
[TOC] 异构系统基于RESTful接口加解密 环境:GO1.8/JDK1.8/Python2.7 GO示例 package common import ( "crypto/aes&quo ...
- aes key长度_AES加密(1): 基本AES算法
简介 AES原本指的是一套标准FIPS 197,而AES算法一般指分组大小为128bits的Rijndeal算法,由比利时学者Joan Daemen和Vincent Rijmen提出. AES与Rij ...
- java中aes明文长度_AES密文与明文长度的关系
AES介绍 严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128位,密钥长度则 ...
- Java使用AES算法并指定密钥种子实现加密解密
Java使用AES指定密钥实现加密解密 一.生成密钥种子 二.使用生成的密钥种子加密 三.使用生成的密钥种子解密 四.AES完整加密解密代码工具类 一.生成密钥种子 import org.apache ...
- Android AES 文件加密解密
几番折磨终有结果,现将Demo整理出来... [java] view plain copy package com.king.zjc; import java.io.File; import ja ...
- Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别
Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化. Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于 ...
- Android AES 加密、解密
AES加密介绍 ASE 加密.解密的关键在于秘钥.只有使用加密时使用的秘钥,才可以解密. 生成秘钥的代码网上一大堆,下面的代码可生成一个秘钥 private SecretKey generateKey ...
- Android AES加密解密
AES加密算法模式有四种:ECB.CBC.CFB.OFB 要想AES加密,至少需要一个16位的密钥,如果是非ECB模式的加密,至少还得需要密钥偏移量. 下面是AES在线加密解密链接: AES在线加密解 ...
最新文章
- 开发者如何构建技术影响力
- 【BZOJ5335】【TJOI2018】—智力竞赛(floyd传递闭包+二分图匹配)
- 客户端检测的含义和方法
- php界面设置编码格式,php设置编码格式的方法
- TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
- 前端中心化管理API使用说明
- VMware虚拟机CentOS7 - VMnet8网络配置及常见问题解决
- Android LinkedList的部分源码解析
- 软件版本的GA、RC的具体含义
- vfp报表纸张设置_vfp教程之Visual Foxpro生成任意打印字段报表的实现
- 单片机原理及应用C语言实验,《单片机原理及应用》实验指导书.doc
- SpringBoot整合JavaMail---发送邮件
- 龙哥库他发matlab程序,编程实现四阶龙哥库塔法解方程
- 二十八、docker详解
- 某数4代cookie生成-2
- VB.NET中LISTVIEW控件点击列首排序问题
- java计算机毕业设计个人连锁民宿信息管理系统设计与开发系统(修改)源码+mysql数据库+系统+lw文档+部署
- seo里的长尾关键词是什么
- java 本地 mq_windows、linux下java连接本地MQ队列实现输入(二)
- 小程序——云开发数据库的数据读取出来显示到页面
热门文章
- iOS 的 XMPPFramework 简介
- [导入]Visual Studio 2005 Team Edition软件架构系列课程(1): 概述
- linux的基础知识——shell基础
- springboot前后端分离项目MultipartFile获取前端传的file为null问题
- 【剑指offer】面试题38:字符串的排列(Java)
- Leetcode--135. 发糖果
- php session 前缀,PHP文件包含--session
- html右侧分为两个框架,html – 两个框架一个滚动条
- php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?
- qt mysql 系统时间_使用QT和参数在SQLite数据库中插入日期时间