移动开发---AES加密解密

aes加密解密

?


import android.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * Date: 2019/4/1
 * autor:Wayne
 */
public class AESUtil {
    private static String key = "123456789";

    /**
     * ?? ? * 加密
     * ?? ? * @param content
     * ?? ? * @param strKey
     * ?? ? * @return
     * ?? ? * @throws Exception
     * ?? ?
     */
    public static byte[] encrypt(String content, String strKey) throws Exception {
        SecretKeySpec skeySpec = getKey(strKey);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(content.getBytes());
        return encrypted;
    }

    /**
     * ?? ? * 解密
     * ?? ? * @param strKey
     * ?? ? * @param content
     * ?? ? * @return
     * ?? ? * @throws Exception
     * ?? ?
     */
    public static String decrypt(byte[] content, String strKey) throws Exception {
        SecretKeySpec skeySpec = getKey(strKey);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec("1234567890123456".getBytes());
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] original = cipher.doFinal(content);
        String originalString = new String(original);
        return originalString;
    }

    private static SecretKeySpec getKey(String strKey) throws Exception {
        byte[] arrBTmp = strKey.getBytes();
        // 创建一个空的16位字节数组(默认值为0)
        byte[] arrB = new byte[16];

        for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
            arrB[i] = arrBTmp[i];
        }

        SecretKeySpec skeySpec = new SecretKeySpec(arrB, "AES");

        return skeySpec;
    }

    /**
     * ?? ? * base 64 encode
     * ?? ? * @param bytes 待编码的byte[]
     * ?? ? * @return 编码后的base 64 code
     * ?? ?
     */
    public static String base64Encode(byte[] bytes) {
        return Base64.encodeToString(bytes,Base64.DEFAULT);
    }

    /**
     * ?? ? * base 64 decode
     * ?? ? * @param base64Code 待解码的base 64 code
     * ?? ? * @return 解码后的byte[]
     * ?? ? * @throws Exception
     * ?? ?
     */
    public static byte[] base64Decode(String base64Code) throws Exception {
        return base64Code.isEmpty() ? null : Base64.decode(base64Code,Base64.DEFAULT);
    }

    /**
     * ?? ? * AES加密为base 64 code
     * ?? ? * @param content 待加密的内容
     * ?? ? * @param encryptKey 加密密钥
     * ?? ? * @return 加密后的base 64 code
     * ?? ? * @throws Exception? //加密传String类型,返回String类型
     * ?? ?
     */
    public static String aesEncrypt(String content, String encryptKey) throws Exception {
        return base64Encode(encrypt(content, encryptKey));
    }

    /**
     * ?? ? * 将base 64 code AES解密
     * ?? ? * @param encryptStr 待解密的base 64 code
     * ?? ? * @param decryptKey 解密密钥
     * ?? ? * @return 解密后的string?? //解密传String类型,返回String类型
     * ?? ? * @throws Exception
     * ?? ?
     */
    public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {
        return encryptStr.isEmpty() ? null : decrypt(base64Decode(encryptStr), decryptKey);
    }

    public static void main(String[] args) throws Exception {
//?? ??? ?String encrypt = aesEncrypt("test", key);
//?? ??? ?System.out.println(encrypt);
        String decrypt = aesDecrypt("ii7wTRyDfeqtT9odaURoPA==", key);
        System.out.println(decrypt);
    }

}

?

原文地址:https://www.cnblogs.com/ai2050/p/10733087.html

时间: 2024-10-05 23:25:24

移动开发---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