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-09-15 23:43:40

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

求java中常用的加密、解密算法?

问题描述 求java中常用的加密.解密算法? 页面提交的密码.电话等信息通常需要加密后存放到数据库里,在个人信息展示时通常需要进行解密,如何实现?求案例或者思路. 解决方案 常用加密解密算法java常用的加密,解密,数字签名等APIJava Cipher类 DES算法(加密与解密) 解决方案二: 这个其实在百度里搜一下,到处都有答案,现提供一个参考文章:http://www.blogjava.net/amigoxie/archive/2014/07/06/415503.html 解决方案三: h

密钥生成器-java中的 DES 加密与解密

问题描述 java中的 DES 加密与解密 DES类 package dao; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class DES { public static String ALGORITHM_DES="DES"; //加密算法的名称 public sta

asp.net TripleDES加密、解密算法_实用技巧

using System;    using System.Collections.Generic;    using System.Linq;    using System.Text;    using System.Security.Cryptography;    using System.IO;    namespace WindowsFormsApplication1    {       #region TripleDES算法           public class Clas

基于Java实现的Base64加密、解密原理代码_java

一.概述 1.Base64是什么: Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在

Android、iOS和Java通用的AES128加密解密示例代码_java

前言 移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如android和iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输. 这篇文章给大家分享AES的加密和解密.Android和ios通用的AES加密算法.大家可以直接集成到自己的项目.服务器接口如果是用Java写的话.整个框架都完美了.如果是.NET编写的后台接口的话.得改造一下哦 IOS加密 /*加密方法*/ (NSString *)AES256EncryptWithPlainText:(NSString

微盾PHP脚本加密专家php解密算法

复制代码 代码如下: <?php /*********************************** *威盾PHP加密专家解密算法 By:Neeao *http://Neeao.com *2009-09-10 ***********************************/ $filename="play-js.php";//要解密的文件 $lines = file($filename);//0,1,2行 //第一次base64解密 $content="&

微盾PHP脚本加密专家php解密算法_php技巧

复制代码 代码如下: <?php /*********************************** *威盾PHP加密专家解密算法 By:Neeao *http://Neeao.com *2009-09-10 ***********************************/ $filename="play-js.php";//要解密的文件 $lines = file($filename);//0,1,2行 //第一次base64解密 $content="&

PHP aes (ecb)解密后乱码问题_php实例

内容:abcd KEY:1234567890123456 加密后base64:T7UT2NQ1AFvR9unjA0wKWA== function apiDataDecrypt($data, $key='') { $data = base64_decode($data); $pad = 16 - (strlen($data) % 16); $padData = $data . str_repeat(chr($pad), $pad); return mcrypt_decrypt(MCRYPT_RIJ

.net 下文件加密和解密

加密|解密 关键词:.net 2005  Framework 加密解密文件正文:用XML文件记录配置信息时,有时候不希望别人看到配置信息的内容.怎么才能实现呢.这里介绍几种常见的加密和解密算法.这些算法Framework已经封装好了.我们不用理会具体的实现,只需要会用就行.下面给出一个源程序供大家参考.using System;using System.Security.Cryptography;using System.IO;using System.Text;namespace coder{