`

关于AES在Android和JAVA上加密解密不能对应的问题

阅读更多
项目需要,客户端在提交信息的时候参数都需要加密传输

在网上搜搜刮刮,整了一个工具类出来,JAVA服务端总是解析报错,如下的异常


java.security.InvalidKeyException: Invalid AES key length: 6 bytes 


仔细排查了一番

The problem is surely with the length of the key, I have tried different length but I am getting the same, could you please tell me the length of the key please, I am new to cryptography, I have made some research but still can't figure out the problem. Thanks a lot for your answers.

 
AES supports 128, 192 and 256 bit keys, so the number of bytes needs to be 16, 24, or 32. Note that the latter two may not be available in all circumstances (as the comment in the "kgen.init(128)" line mentions).  


发现key的字节数必须是8的整数倍..修改key的长度。

加密解密的代码如下:

    public static byte[] iv = {1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};
//初始化向量参数,AES 为16bytes. DES 为8bytes.
    public static String encrypt4AES(String source) {
        try {
        	
        	IvParameterSpec zeroIv = new IvParameterSpec(iv);
    		SecretKeySpec key1 = new SecretKeySpec(iv, "AES");
    		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    		cipher.init(Cipher.ENCRYPT_MODE, key1, zeroIv);
    		byte[] encryptedData = cipher.doFinal(source.getBytes());
          String encryptResultStr = parseByte2HexStr(encryptedData);
          return encryptResultStr; // 加密
      } catch (Exception e) {
          e.printStackTrace();
          return "";
      }
  }

    public static String decrypt4AES(String content) {
        try {
            byte[] decryptFrom = parseHexStr2Byte(content);
            
    		IvParameterSpec zeroIv = new IvParameterSpec(iv);
    		SecretKeySpec key1 = new SecretKeySpec(iv, "AES");
    		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    		cipher.init(Cipher.DECRYPT_MODE, key1, zeroIv);
    		byte decryptedData[] = cipher.doFinal(decryptFrom);
            return new String(decryptedData); // 加密
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }




CBC是工作模式,DES一共有电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种模式,

PKCS5Padding是填充模式,还有其它的填充模式:

然后,cipher.init()一共有三个参数:Cipher.ENCRYPT_MODE, key, zeroIv,zeroIv就是初始化向量。

Android客户端加密后的内容,在JAVA端可以正常解密


[url]
http://www.cnblogs.com/lianghui66/archive/2013/03/07/2948494.html
[/url]
分享到:
评论

相关推荐

    uniapp 前后端AES加密解密.rar

    本压缩包"uniapp 前后端AES加密解密.rar"正是为了解决这一问题,它包含了在uniapp环境下实现前后端AES加密解密的方法。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,具有...

    Android调用JNI接口使用C++动态库进行AES256位加密

    本篇将详细介绍如何在Android应用中通过JNI(Java Native Interface)调用C++动态库进行AES256位加密。 首先,我们要理解JNI的概念。JNI是Java平台的标准接口,允许Java代码和其他语言写的代码进行交互。在Android...

    Android之AES加密

    在Android平台上,AES(Advanced Encryption Standard)加密是一种广泛使用的对称加密算法,用于保护数据的安全性。本篇文章将深入探讨Android环境下如何实现AES加密,并提供一个名为`AndroidAesDemo`的示例项目来...

    android ios 通用 AES加密

    在Java和C#中,AES加密的实现与Android类似,但需要注意的是,由于API的不同,具体的类和方法会有所差异。例如,Java中使用SecretKeySpec和IvParameterSpec创建密钥和初始化向量,而C#中则使用Aes.Create()生成AES...

    Android下AES加密算法的JNI实现(包含SO文件)

    总的来说,这个资源提供了一个完整的Android JNI AES加密实现,包括了必要的SO库文件和Java调用示例,对于想要在Android应用中实现高效加密功能的开发者来说,是一个非常实用的参考。在实际开发中,可以根据具体需求...

    Android RSA AES 加密库

    总结来说,Android RSA AES加密库是将RSA非对称加密和AES对称加密相结合,利用JNI技术在C/C++层实现高效加密解密的工具,为Android应用提供了强大的数据安全保障。开发者可以通过这样的库,为自己的应用添加高级别的...

    RSA+AES 加密工具类 Java

    在这个“RSA+AES加密工具类 Java”中,我们将深入探讨这两种加密技术以及如何在Java环境中,包括Android和Web应用,实现它们。 首先,RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,基于大整数因子分解的困难...

    java、android、web三端通用的RSA和AES工具

    综上所述,实现Java、Android、Web三端通用的RSA和AES工具,需要考虑跨平台兼容性、数据安全存储以及高效的加密解密算法。在实际应用中,应结合具体场景选择合适的加密模式,并确保密钥管理的安全性,以保护数据不被...

    android端写的DES加密解密代码对应C#写的加密解密代码。两者加密解密结果完全一致

    在Android平台上,我们可以通过Java的`javax.crypto`包来实现DES加密和解密。主要涉及`Cipher`类的初始化、密钥的生成以及加密解密操作。Android代码通常会使用`KeyGenerator`生成密钥,`Cipher`进行加密和解密,...

    Android使用AES加密解密准确版下载。每次加密的密文结果不一样?能加密但解密不出原文?看这里就对了

    在Android开发中,我们通常使用Java的`javax.crypto`包来实现AES加密解密。下面我们将详细介绍AES加密的原理、步骤以及可能出现的问题及其解决方案。 **AES加密原理** AES基于块密码,它将数据分成128位的块进行...

    iOS与Android通用AES加密

    而"AESTest"可能包含了测试用例,用于验证iOS和Android两端加密解密的一致性。在实际项目中,开发者需要确保在两个平台上使用相同的密钥和初始化向量(IV)来加密和解密数据,这样才能保证数据的互操作性。 在实现...

    使用native方法实现加密解密

    本篇文章将深入探讨如何使用native方法实现加密解密,主要关注JNI的使用、编码解码的基本原理以及在Android环境中如何集成和调用这些原生函数。 首先,我们需要理解JNI的概念。JNI是Java平台的一部分,它为Java...

    java、android通用的RSA和AES工具类

    本文将详细介绍Java和Android平台上常用的两种加密算法:RSA和AES,以及如何使用它们的通用工具类。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它基于大数因子分解...

    AES加密时抛出java.security.InvalidKeyException: Illegal key size or default parameter

    当在Java环境中使用AES加密时遇到 `java.security.InvalidKeyException: Illegal key size or default parameter` 这个异常,通常意味着密钥的长度超过了Java安全策略所允许的最大值。具体来说: - **非法密钥大小...

    AES+RSA加解密demo源码(js和java互通).zip

    综上所述,这个示例提供了一个全面的教程,涵盖了非对称加密(RSA)和对称加密(AES)的结合使用,以及如何在不同的编程语言(JavaScript和Java)之间实现加解密的互通。这对于开发安全的跨平台应用和服务接口具有很...

    用C++开源库cryptopp 封装的Aes对称加密

    当涉及到Android平台时,由于Android原生支持JNI(Java Native Interface),我们可以利用Cryptopp库创建一个本地库(.so文件),然后在Java代码中通过JNI接口调用C++的加密解密函数。首先,在Android Studio中配置...

    iOS、Android 双平台AES128加密源代码

    在提供的文件中,"iOS_AES_128"和"Android_AES_128"很可能是两个单独的实现,分别对应iOS和Android平台的AES128加密源代码。开发者可以参考这些源码来理解和实现跨平台的加密解密功能。不过,需要注意的是,为了增强...

    android开发RSA-AES-混合加密Demo

    在Android应用中,这个过程可以通过Java的`javax.crypto`包来实现,包括`KeyPairGenerator`生成RSA密钥对,`SecretKeySpec`创建AES密钥,以及`Cipher`对象进行加密和解密操作。 在"RSA-AES-混合加密Demo"中,开发者...

    Android DES,AES,RSA实现

    为了在Android项目中实现这些加密算法,你需要创建对应的类或者工具方法,封装加密和解密过程,确保在正确管理密钥的同时,提高代码的可读性和可维护性。同时,考虑到Android设备的多样性,需要注意API版本的兼容性...

    [安卓开发] 通过so文件进行数据AES加密

    在Android中,使用JNI可以实现更底层的性能优化和安全增强,因为JNI允许Java代码直接调用C/C++原生代码,这在处理加密和解密这类计算密集型任务时非常有用。下面我们将详细讲解如何在Android应用中实现这个过程。 ...

Global site tag (gtag.js) - Google Analytics