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;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA入门级教学之(三元运算符)

/* 三元运算符/三目运算符/条件运算符 1.语法规则&#xff1a; 布尔表达式?表达式1:表达式2; true 执行表达式1 false 执行表达式2 */ public class OperatorTest06 {public void main(String[] args) { //编译错误 //10; //男;//布尔类型的变量 boolean sexf…

java 加密 数字_java 加密数字签名

1)消息摘要&#xff1a;这是一种与消息认证码结合使用以确保消息完整性的技术。 主要使用单向散列函数算法&#xff0c;可用于检验消息的完整性&#xff0c;和通过散列密码直接以文本形式保存等&#xff0c;目前广泛使用的算法有MD4、MD5、SHA- 1&#xff0c;jdk1.5对上面都提供…

JAVA入门级教学之(if语句)

/* 关于java语言中的if语句&#xff0c;属于选择结构 if语句又被称为分支语句/条件控制语句1.if语句的语法结构&#xff1a;四种编写方式 第一种&#xff1a;条件为真&#xff0c;执行大括号内容 条件为假&#xff0c;*跳出*大括号内容 if(布尔表达式){ java…

python怎么处理数据标注_在python中将数据标记为敏感

编辑我提出了一个使用ctypes(反过来使用c)将内存归零的解决方案。import sysimport ctypesdef zerome(string):location id(string) 20size sys.getsizeof(string) - 20memset ctypes.cdll.msvcrt.memset# For Linux, use the following. Change the 6 to whatever it is o…

JAVA入门级教学之(switch语句)

/* 关于switch语句(我称为匹配语句)&#xff1a; 1.switch语句也属于选择结构&#xff0c;也是分支语句 2.switch语句的语法结构&#xff1a; 一个比较完整的switch语句应该这样编写&#xff1a; //case有匹配的意思,相当于拿数据匹配&#x…

java实现验证码图片_java实现验证码图片

1 packagesip.utils;2 importjava.awt.Color;3 importjava.awt.Graphics2D;4 importjava.awt.geom.AffineTransform;5 importjava.util.Random;67 /**8 * 验证码图片生成器9 *10 *authorWuZhengFei11 *12 */13 public classIdentityCode {14 /**15 * 验证码图片的宽度。16 */17…

JAVA入门级教学之(for循环)

/* 1.循环结构&#xff1a; 在程序中有一些代码段需要重复执行&#xff0c;假如没有循环结构&#xff0c; 就需要重复写代码。 将来把需要反复执行的代码片段放到"循环"&#xff0c;再联合计数器&#xff0c;共同控制这段需要反…

如何做推荐系统 java_Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统

今天大部分时间都在写业务代码&#xff0c;然后算是从无到有的配置了下spring与mybatis的集成。SpringMVCMybatis Web开发流程配置数据源在applicationContext.xml中引入数据源的配置&#xff1a;在spring-my-datasource.xml中配置数据源相关的内容&#xff1a;配置完成后&…

JAVA入门级教学之(while循环语句)

/* while循环语句&#xff1a; 1.while(布尔表达式) { 循环体; } 2.while循环的执行原理&#xff1a; 先判断布尔表达式的结果&#xff1a; *true …

JAVA入门级教学之(do...while循环)

/* do...while: 1.do...while循环的语法结构&#xff1a; do{ 循环体; }while(布尔表达式); 2.do...while循环的执行原理&#xff1a; 3.do...while循环的执行次数&#xff1a; …

java 接口表单提交_Java http 调用接口提交表单以及文件

Java HttpURLConnection 使用/****/package com.demo.java;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnectio…

JAVA入门级教学之(break跳出)

/* 关于java控制语句中的break语句&#xff1a; 1.break是java语言中的关键字&#xff0c;被翻译为"中断/折断" 2.break";"可以成为一个单独完整的java语句; 3.break语句使用在switch语句中&#xff0c;用来终结swit…

java 文件通道_Java NIO(四)文件通道

文件通道通道是访问I/O服务的导管&#xff0c;I/O可以分为广义的两大类&#xff1a;File I/O和Stream I/O。那么相应的&#xff0c;通道也有两种类型&#xff0c;它们是文件(File)通道和套接字(Socket)通道。文件通道指的是FileChannel&#xff0c;套接字通道则有三个&#xff…

JAVA入门级教学之(continue)

/* continue语句&#xff1a; 1.continue表示&#xff1a;继续/下一个的意思 2.continue;也是一个continue关键字加一个分号构成一个单独的完整的java语句&#xff0c; 主要出现循环语句中用来控制循环的执行。 …

java算法实验标尺问题_在codeigniter项目中使用标尺库

我正在尝试将下面链接中可用的标尺库集成到我的codeigniter项目中 .我使用这些链接中给出的步骤安装和配置它 . 但仍然无法使用库中的方法 . 我尝试了库中的示例代码&#xff0c;但它不起作用 . 看起来Ruler库没有得到我的项目&#xff0c;因此方法没有解决 . 寻求帮助以实现这…

JAVA入门级教学之(方法-1)

目录 JAVA入门级教学之&#xff08;方法-1&#xff09; 1.以下程序不使用"方法"&#xff0c;分析一下程序会存在哪些优缺点&#xff1f; 2.方法的本质&#xff1a;是一段代码片段&#xff0c;可以完成特定功能&#xff0c;可以重复利用 3.注意&#xff1a;方法定义在…

java设计模式初探之装饰者_JAVA设计模式初探之装饰者模式

装饰者模式1、意图&#xff1a; 动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c; Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。2、适用环境(1)在不影响其他对象的情况下&#xff0c;以动态、透明的方式给单个对象添加职责…

JAVA入门级教学之(方法-2)

/* 关于方法调用 -1.方法的修饰符列表中有static关键字&#xff0c;完整的调用方法是:类名.方法名(实参列表); -2.对于方法的修饰符列表中有static关键字的&#xff0c;"类名."可以省略不写 -3.对于在类外的方法调用&#xff0c;就必须使…

JAVA入门级教学之(方法-题-3)

/*分析以下程序的输出结果&#xff1a; *方法体内自上而下执行 *main方法开始main 方法结束*/public class method03 {public static void main(String[] args){System.out.println("main begin");m1();System.out.println("main over");}public static vo…

redis在java中的方法_redis在java中的使用方法

Redis是key-value方式储存数据的内存数据库。下载后解压&#xff0c;redis-server.exe是redis服务&#xff0c;启动之后就可以使用redis。redis-cli.exe是客户端&#xff0c;可以访问本地或远程的redis。redis-cli.exe -h 127.0.0.1 -p 6379 命令行命令。修改-h后的ip…