JAVA实现AES的加密和解密算法

原文 JAVA实现AES的加密和解密算法

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

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * AES 是一种可逆加密算法,对用户的敏感信息加密处理
 * 对原始数据进行AES加密后,在进行Base64编码转化;
 */
public class AESOperator {
    /*
    * 加密用的Key 可以用26个字母和数字组成
    * 此处使用AES-128-CBC加密模式,key需要为16位。
    */
    private String sKey = "0123456789abcdef";
    private String ivParameter = "0123456789abcdef";
    private static AESOperator instance = null;

    private AESOperator() {

    }

    public static AESOperator getInstance() {
        if (instance == null)
            instance = new AESOperator();
        return instance;
    }

    // 加密
    public String encrypt(String sSrc) throws Exception {
        Cipher cipher = Cipher.getInstance("AES / CBC / PKCS5Padding");
        byte[] raw = sKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
        return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码。
    }

    // 解密
    public String decrypt(String sSrc) throws Exception {
        try {
            byte[] raw = sKey.getBytes("ASCII");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密
            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original, "utf-8");
            return originalString;
        } catch (Exception ex) {
            return null;
        }
    }

    public static void main(String[] args) throws Exception {
// 需要加密的字串
        String cSrc = "我来自www.wenhq.com";
        System.out.println(cSrc);
// 加密
        long lStart = System.currentTimeMillis();
        String enString = AESOperator.getInstance().encrypt(cSrc);
        System.out.println("加密后的字串是:" + enString);

        long lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("加密耗时:" + lUseTime + "毫秒");
// 解密
        lStart = System.currentTimeMillis();
        String DeString = AESOperator.getInstance().decrypt(enString);
        System.out.println("解密后的字串是:" + DeString);
        lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("解密耗时:" + lUseTime + "毫秒");
    }
}
时间: 2024-12-14 07:10:07

JAVA实现AES的加密和解密算法的相关文章

JAVA中AES对称加密和解密

AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Ba

java实现AES/CBC/pack5padding加解密算法

最近要测试一个借口,借口的传值参数是使用AES加密,偏移量为0000000000000000,秘钥:12345678901234567890123456789012,加密后内容转成16进制发送,用网上的代码一直没实现,最后发送是因为jre的两个jar包需要升级,支持key大于16位. 两个jar包:US_export_policy.jar.local_policy.jar,下载地址:https://files.cnblogs.com/files/tech-test/security.zip 代码

c++实现加密和解密算法以及JNI技术的应用实例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

位加密、解密算法

位加密解密算法即将明文信息转化为二进制数据,然后对这些二进制位进行加密便得到密文.位加密算法依托于计算机的强大的位处理能力,在实际应用中非常流行.现代密码学中的很多加密.解密算法方案都依赖于位加密.解密思路,例如,非常流行的序列密码方案. 1. 位加密.解密算法 在java语言中,提供了6种位运算符,如下表所示.在密码学中,可以根据需要来选择合适的位运算符进行加密.解密.一般来说,使用异或运算要比较方便. 位运算 名称 & 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) ~ 取反(

常见的加密和解密算法—AES

一.AES加密概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一. Rijndae

常见的加密和解密算法—MD5

一.MD5加密概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992). MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用

AES对称加密和解密

package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; impor

一次一密加密、解密算法

1. 一次一密加密.解密算法 一次一密密码系统的一个重要特性是密钥K为一个真随机序列,且密钥只使用一次. 下面通过计算机的伪随机函数产生的随机序列作为密钥来简单演示一次一密的加密解密算法,代码示例如下: /** * 一次一密加密.解密算法 * @param str 明文(密文) * @param key 密钥 * @return 密文(明文) */ static char[] bitcode(char[] str, char[] key){ int len,i; char[] wen; len

替换加密、解密算法

替换加密解密算法方案的起源可以追溯到凯撒(Caesar)时代,据说凯撒为了保障情报的可靠性而发明了凯撒密码.凯撒密码是一种简单的置换密码,在加密时,字母表中的每个字母都用其后的第三个字母表示,例如,a用d表示,b用e表示,.......在解密时,只需要执行逆过程即可. 1. 替换加密.解密算法 随这历史的发展,替换密码算法方案已具有很多种形式,主要有以下几种: 单表代替密码算法方案 同音代替密码算法方案 多表代替密码算法方案 多字母组代替密码算法方案 下面以单表代替密码算法方案为例进行介绍. 1