AES 加密解密

import java.util.UUID;              // 均在android.jar中
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;  
import javax.crypto.spec.SecretKeySpec;  
import android.util.Base64;

String key = new String("");      // 键值
String iv = new String("");       // 向量

// 加密,其参数为要加密的数据

public static String Encrypt(String data) throws Exception
{
        byte[] raw = key.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        // 设定算法/模式/补码方式
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        // 设定向量增加算法强度
        IvParameterSpec paramter = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, paramter);
        
        // 使用Base64进行二次加密
        byte[] encrypted = cipher.doFinal(data.getBytes());
        String encryptData = new String(Base64.encode(encrypted, Base64.DEFAULT));

   // 防止数据加密后出现换行符(去除换行符)
        String changeData = new String(encryptData.replaceAll("\r|\n",""));
        return changeData;
}

// 解密,其参数是要解密的数据
public static String Decrypt(String data)  throws Exception
{
        byte[] raw = key.getBytes("UTF-8");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        // 设定算法/模式/补码方式
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        // 设定向量增加算法强度
        IvParameterSpec parameter = new IvParameterSpec(iv.getBytes());
        // 使用Base64进行二次加密
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, parameter);
        byte[] encrypted1 = Base64.decode(data, Base64.DEFAULT);
        try {
            byte[] original = cipher.doFinal(encrypted1);
            String DecryptData = new String(original);
            return DecryptData;
        } catch (Exception e) {
            System.out.println(e.toString());
            return "";
        }
}

一般情况下,如果解密后的数据存在中文,在android中习惯上会以UTF-8显示出来,假设是如此:

可参考: http://www.sharejs.com/codes/java/5422

// 将utf-8转换为中文

public static String GetAnsiMsg(String dataStr)
{
        int index = 0;
        StringBuffer buffer = new StringBuffer();
 
        int li_len = dataStr.length();
        while (index < li_len)
        {
            if (index >= li_len - 1 || !"\\u".equals(dataStr.substring(index, index + 2)))
            {
                buffer.append(dataStr.charAt(index));
 
                index++;
                continue;
            }
 
            String charStr = "";
            charStr = dataStr.substring(index + 2, index + 6);
            char letter = (char) Integer.parseInt(charStr, 16);
            buffer.append(letter);
            index += 6;
        }
 
        return buffer.toString();

}

时间: 2024-08-27 02:17:02

AES 加密解密的相关文章

非对称技术栈实现AES加密解密

非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的,这就要求在前端和后端不同的技术栈上完成信息的加密解密.当然我们通常完成这样专业的功能都会考虑使用相应的框架或者程序库来完成功能,前端或者NodeJS平台通常是JavaScript语言,JavaScript主流的加密解密库分别是SjclJS和CryptoJS, 本文以CryptoJS为例进行讨论.另

php与java通用AES加密解密算法

php与java通用AES加密解密算法 AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法. php版代码如下: <?php class CryptAES { protected $cipher = MCRYPT_RIJNDAEL_128; protected $mode = MCRYPT_MODE_ECB; protected

AES加密解密&amp;amp;&amp;amp;SHA1、SHA加密&amp;amp;&amp;amp;MD5加密

AES加密解密 SHA1.SHA加密 MD5加密 二话不说立即附上代码: package com.luo.util; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.

java使用AES加密解密 AES-128-ECB加密

http://www.cnblogs.com/chen-lhx/p/5817161.html ************************************************* import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @author Administrator * */ pub

C# AES加密解密

完整代码: /****************************************************************** * 创建人:HTL * 创建时间:2015-04-17 17:36:35 * 说明:C# AES加密解密 * Email:[email protected] *******************************************************************//* using System; using System

JAVA中使用AES加密解密

技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info("[rsaTest获取请求:{}]", str); try { String encryptResult = AESUtil.encrypt(str, "123456"); log.info("[AES加密后的参数为:{}]", encryptResult

Java 关于密码处理的工具类[MD5编码][AES加密/解密]

项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两类小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从编码后的字符串反推回去的. MD5的方法是基于散列的.本身信息不全.理论上是不能还原成唯一字符串的. 网上所谓的解密,也只是拥有一个足够大的字典映射,将编码前的源字符和编码后的目标字符关联起来而已,大多数常见的还行,复杂点的估计就会话费很长时间,有兴趣的可以试试. 至于MD5的用法,在初次录入的时候

ruby AES加密解密

最近和京东合作做一个项目,在接口对接传递参数时,参数需要通过AES加密解密. 本来想到用gem 'aescrypt'处理,但是aescrypt的编码方式用的base64,而京东那边用的是16进制.所以就自己写了加密解密方法. AES 加密 def aes_encrypt(key, encrypted_string) aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB") aes.encrypt aes.key = key txt = aes.u

AES 加密 解密

/// <summary> /// AES 加密 /// </summary> /// <param name="input">待加密的字符串</param> /// <param name="key">加密密钥,要求为32位</param> /// <returns>加密成功返回加密后的字符串,失败 throw</returns> public static strin

C# 实现 JAVA AES加密解密[原创]

以下是网上普遍能收到的JAVA AES加密解密方法. 因为里面用到了KeyGenerator 和 SecureRandom,但是.NET 里面没有这2个类.无法使用安全随机数生成KEY. 我们在接收JAVA发送的AES加密字符串后,在.NET没有对应的KeyGenerator 和 SecureRandom去生成AES 的 KEY值,导致无法直接解密. 1 import java.security.SecureRandom; 2 import java.util.Base64; 3 4 impor