AES加密解密代码

package com.huizhuyun.jeemis.api.openAPI.service;

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;

import java.util.Base64;import java.util.Collection;import java.util.HashMap;import java.util.Map;

import static java.util.Base64.*;

/** * Aes加密解密 */public class AesMethodOpenService {    private static final Logger LOGGER = LoggerFactory.getLogger(AesMethodOpenService.class);    private static final String ENCODING = "GBK";    private static final String KEY_ALGORITHM = "AES";    private static final Base64.Decoder decoder = Base64.getDecoder();    private static final Base64.Encoder encoder = Base64.getEncoder();    /**     * 加解密算法/工作模式/填充方式     */    private  static final String DEFAUIT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";    /**     * 填充向量     */    private static final String FILL_VECTOR = "1234560405060708";

    /**     * 加密     *     * @param sSrc  加密前的字符串     * @param sKey 加密KEY     * @return     * @throws Exception     * @author yinning     */    public static String encrypt (String sSrc, String sKey) throws  Exception{        if (sKey == null) {            System.out.print("Key为空null");            return null;        }        // 判断Key是否为16位        if (sKey.length() != 16) {            System.out.print("Key长度不是16位");            return null;        }        byte[] raw = sKey.getBytes("utf-8");        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");        Cipher cipher = Cipher.getInstance(DEFAUIT_CIPHER_ALGORITHM);//"算法/模式/补码方式"        IvParameterSpec iv = new IvParameterSpec(sKey.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);        byte[] encrypted = cipher.doFinal(sSrc.getBytes());        String encodedText = encoder.encodeToString(encrypted);        return encodedText;//此处使用BASE64做转码功能,同时能起到2次加密的作用。

    }

    /**     * 解密     *     * @param sSrc  解密前的字符串     * @param sKey 解密KEY     * @return     * @throws Exception     * @author yinning     */    public static String decrypt(String sSrc, String sKey) {        try {            // 判断Key是否正确            if (sKey == null) {                System.out.print("Key为空null");                return null;            }            // 判断Key是否为16位            if (sKey.length() != 16) {                System.out.print("Key长度不是16位");                return null;            }            byte[] raw = sKey.getBytes("utf-8");            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");            Cipher cipher = Cipher.getInstance(DEFAUIT_CIPHER_ALGORITHM);            IvParameterSpec iv = new IvParameterSpec(sKey.getBytes());            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);            byte[] encrypted1 = decoder.decode(sSrc);//先用base64解密            try {                byte[] original = cipher.doFinal(encrypted1);                String originalString = new String(original);                return originalString;            } catch (Exception e) {                System.out.println(e.toString());                return null;            }        } catch (Exception ex) {            System.out.println(ex.toString());            return null;        }    }

    public static void main(String[] args) throws Exception {

        String cKey = "9230967890982316";        // 需要加密的字串        String cSrc = "211421188811111212";        System.out.println(cSrc);        // 加密        long lStart = System.currentTimeMillis();        String enString = encrypt(cSrc, cKey);        System.out.println("加密后的字串是:" + enString);

        long lUseTime = System.currentTimeMillis() - lStart;        System.out.println("加密耗时:" + lUseTime + "毫秒");        lStart = System.currentTimeMillis();            String DeString = decrypt(enString, cKey);        System.out.println("解密后的字串是:" + DeString);        lUseTime = System.currentTimeMillis() - lStart;        System.out.println("解密耗时:" + lUseTime + "毫秒");

    }}

原文地址:https://www.cnblogs.com/fengfeng21/p/12154665.html

时间: 2024-10-02 03:01:11

AES加密解密代码的相关文章

Aes 加密解密 java加密解密

使用AES加密解密代码详解 首先,如果是使用nodejs + vue 写的前端, 那么你需要npm 加载一个js文件 npm i crypto-js --save --save-exact npm install crypto-js java代码加密解密类 package com.telling.util.crypto; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.co

非对称技术栈实现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 关于密码处理的工具类[MD5编码][AES加密/解密]

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

unity3d与flash交互、aes加密解密

众所周知,unity在2013年就放弃flash了,但是有时候,真的会需要到flash,比如web端需要unity web player插件,很多浏览器都拦截了,flash倒不会,因为他是微软的. u3d在打包flash的时候api是不可以修改的,默认就是flash的api,打包出来就是as(ActionScript代码)编译.所以很多net2.0的api都不能使用,比如System.Security.Cryptography这个库,注:这个库是C#集成好的加密解密 u3d导出flash会报错,

【加密解密】-AES加密解密实现

先看实现效果,测试代码如下: package org.iti.algorithm; public class AESDemo { public static void main(String[] args) { // 明文 String mingWen = "zhuwenfei"; // 密钥 String pwd = "123"; // 明文加密得到的密文 String miWen = AESUtils.encrypt(pwd, mingWen); // 输出密文