`
zuoye
  • 浏览: 4029 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跨JAVA,IOS平台的AES加密解密算法

 
阅读更多
    我们项目的需求是IOS前台进行数据加密,java后台进行数据解密,采用对称加密算法。权衡利弊后选用AES加密算法。在实现的过程中发现IOS加密的数据java端解密不了,翻阅资料发现是IOS端ASE的填充算法采用PKCS7Padding,而我在java端采用的填充算法是PKCS5Padding或者NONE,继续查阅资料终于找到JAVA端可用的基于PACS7Padding的加解密算法,自己改造了一下发布如下:
package com.ys.dk.common.util;

import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.util.encoders.Base64;

public class AESUtil {
	/**
	 * 密钥算法 java6支持56位密钥,bouncycastle支持64位
	 * */
	public static final String KEY_ALGORITHM = "AES";
	public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS7Padding";
	//key长度为[128bit(16byte),192bit(24byte),256bit(32byte)]中的一个
	public static final String KEY = "1234567890123456";
	public static final SecretKey secretKey  = new SecretKeySpec(KEY.getBytes(), KEY_ALGORITHM);
	static {
		Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
	}

	/**
	 * 加密数据
	 * @param str
	 * @return String 加密后的数据
	 * */
	public static String encrypt(String str) throws Exception {
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		// 初始化,设置为加密模式
		cipher.init(Cipher.ENCRYPT_MODE, secretKey);
		// 执行操作
		byte[] data = cipher.doFinal(str.getBytes());
		data = Base64.encode(data);
		return new String(data,"UTF-8");
	}

	/**
	 * 解密数据
	 * 
	 * @param str
	 * @return String 解密后的数据
	 * */
	public static String decrypt(String str) throws Exception {
		byte[] data = Base64.decode(str);
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		// 初始化,设置为解密模式
		cipher.init(Cipher.DECRYPT_MODE, secretKey);
		// 执行操作
		return new String(cipher.doFinal(data),"UTF-8");
	}

	public static void main(String[] args) throws Exception {
	    String str = "你好";
		System.out.println("原始串:"+str);
        String enc = AESUtil.encrypt(str);
     //   enc= "llQCl2Zii01ora9J3PJxNA==";
        System.out.println("加密后:"+enc);
        String dec = AESUtil.decrypt(enc);
        System.out.println("解密后:"+dec);
	}

	
}


   注意两点:
   1, 加解密用到了bouncycastle的jar,附件里面有下载
    2,用附件中的local_policy.jar,US_export_policy.jar覆盖JDK安装路径的\jre\lib\security(例如我的目录结构为C:\Program Files\Java\jdk1.6.0_43\jre\lib\security,别弄错目录了)目录下的两个jar
分享到:
评论
1 楼 zuoye 2014-07-16  
代码改了一个地方,key应该是16位,原来多了一位

相关推荐

    AES加密解密算法 iOS和Android完美实现

    本篇文章将详细探讨AES加密解密算法在iOS和Android平台上的实现原理以及具体步骤。 首先,AES算法基于块密码,它的工作模式有ECB(电子密码本)、CBC(密文链接)、CFB(密文反馈)、OFB(输出反馈)和CTR(计数器...

    AES加密解密,iOS,Android,Java,.Net通用

    AES加密有多种算法模式,下面提供两套模式的可用源码: 一、CBC(Cipher Block Chaining,加密块链)模式 二、ECB(Electronic Code Book,电子密码本)模式 其中CBC模式下,有.NET的源码。而ECB模式的,大家在网上找...

    ios NSData NSString AES加密解密算法源码

    理解并掌握这种AES加密解密方法对于iOS开发者来说非常关键,可以有效地保护应用程序的数据安全,防止未授权访问。同时,了解如何在Objective-C中使用CommonCrypto库也可以扩展到其他加密算法的实现,如RSA或DES。在...

    iOS AES加密解密

    本文将深入探讨iOS平台上使用Objective-C(OC)进行AES128加密和解密的实现,以及如何确保与硬件和蓝牙底层的兼容性。 首先,我们需要引入必要的库。在iOS中,苹果提供了一个名为CommonCrypto的框架,它包含了AES...

    ios AES加密解密

    本篇将详细介绍如何在iOS应用中实现AES加密解密。 一、AES加密原理 AES加密基于替换和置换操作,通过128位的块进行加密,密钥长度可以是128、192或256位。在加密过程中,原始数据会被分成128位的块,然后通过一系列...

    iOS AES128加密解密

    **iOS中的AES128加密解密** AES(Advanced Encryption ...通过以上介绍,你应该对iOS平台上的AES128加密解密有了基本了解。在实际项目中,可以根据需求选择合适的实现方式,并结合良好的编程实践确保数据的安全。

    uniapp 前后端AES加密解密.rar

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

    iOS AES加密 PHP解密

    本话题将围绕“iOS AES加密 PHP解密”这一主题展开,讲解如何在iOS应用中使用AES加密数据,并在后端PHP环境中进行解密。 首先,我们需要理解AES的工作原理。AES是一种块加密算法,它以固定大小的块(128位)为单位...

    IOS JAVA AES128加密解密

    总的来说,AES128加密解密在iOS、Android和Java平台上的实现虽然有细微差别,但核心原理是相同的。开发者需要理解加密过程,选择合适的工作模式,并确保跨平台一致性,以保证数据的安全传输和存储。

    java/javascript/iOS的AES加解密(AES/CBC/PKCS5Padding)

    本文将深入探讨AES加密,特别是使用CBC(Cipher Block Chaining,密码块链接)模式和PKCS5Padding填充方式,并在JavaScript、Java和iOS平台上实现这一加密过程。 **一、AES加密简介** AES是一种对称加密算法,由...

    android iOS php des 互通加密解密算法

    `DES`(Data Encryption Standard)是一种广泛使用的对称加密算法,它允许这三种平台之间进行加密解密操作,确保数据的机密性。本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和...

    [iOS]AES加密在iOS上面的实现

    在iOS平台上,我们可以使用内置的安全框架——CryptoKit或CommonCrypto来实现AES加密。CryptoKit是苹果在iOS 13及更高版本中引入的新框架,提供了现代化的加密API,而CommonCrypto则是一个更老但兼容性更强的库。 *...

    android ios 通用 AES加密

    本篇文章将深入探讨AES加密在Java、Android、iOS以及C#中的应用,以及如何实现这些平台之间的通用加密方式。 AES,即高级加密标准,是一种块密码,采用128位的块大小进行操作,并支持128、192和256位的密钥长度。其...

    AES加密解密,iOS,Android,Java,.Net,C#通用

    AES加密有多种算法模式,下面提供两套模式的可用源码: 一、CBC(Cipher Block Chaining,加密块链)模式 二、ECB(Electron ic Code Book,电子密码本)模式 其中CBC模式下,有.NET的源码。而ECB模式的,大家在网上...

Global site tag (gtag.js) - Google Analytics