`

【java】AES加密解密 AES/CBC/PKCS5Padding

    博客分类:
  • Java
阅读更多

<Source>http://www.cnblogs.com/arix04/archive/2009/10/15/1511839.html

 

AES加解密算法,使用Base64做转码以及辅助加密:

 

package com.wintv.common;

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

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

/*******************************************************************************
 * AES加解密算法
 * 
 * @author arix04
 * 
 */

public class AES {

    // 加密
    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();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes());

        return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
    }

    // 解密
    public static String Decrypt(String sSrc, String sKey) throws Exception {
        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("ASCII");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec iv = new IvParameterSpec("0102030405060708"
                    .getBytes());
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(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 {
        /*
         * 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定
         * 此处使用AES-128-CBC加密模式,key需要为16位。
         */
        String cKey = "1234567890123456";
        // 需要加密的字串
        String cSrc = "Email : arix04@xxx.com";
        System.out.println(cSrc);
        // 加密
        long lStart = System.currentTimeMillis();
        String enString = AES.Encrypt(cSrc, cKey);
        System.out.println("加密后的字串是:" + enString);

        long lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("加密耗时:" + lUseTime + "毫秒");
        // 解密
        lStart = System.currentTimeMillis();
        String DeString = AES.Decrypt(enString, cKey);
        System.out.println("解密后的字串是:" + DeString);
        lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("解密耗时:" + lUseTime + "毫秒");
    }
}
 
分享到:
评论

相关推荐

    java/javascript/iOS的AES加解密(AES/CBC/PKCS5Padding)

    本文将深入探讨AES加密,特别是使用CBC(Cipher Block Chaining,密码块链接)模式和PKCS5Padding填充方式,并在JavaScript、Java和iOS平台上实现这一加密过程。 **一、AES加密简介** AES是一种对称加密算法,由...

    C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制.rar

    这些代码会详细展示如何在C#环境中实现AES/CBC/PKCS7Padding加密解密,并将结果转换为16进制字符串,从而实现与Java的兼容性。 总之,理解并掌握AES加密算法、CBC工作模式、PKCS7Padding以及在C#和Java之间的兼容性...

    Java解决AES加密解密 ( AES/ECB/PKCS5Padding )

    JAVA解决AES ECB 模式下加密解密;附加国内三方AES加密网站---http://tool.chacuo.net/cryptaes;如有用解决您工作问题,烦请点个赞

    AES/CBC/PKCS5Padding/ 加解密

    在描述中提到的“AES/CBC/PKCS5Padding”,分别代表了AES算法的不同部分: - AES:AES是高级加密标准,由NIST(美国国家标准与技术研究所)在2001年标准化,取代了之前的DES加密标准。它有三种不同尺寸的密钥,分别...

    Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)

    实现了AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充。是标准的AES算法,支持在线AES加解密网站互解。 本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加...

    对接java AES/ECB/PKCS7Padding加密

    这个过程完全符合Java的AES/ECB/PKCS7Padding加密方式,可以与Java代码无缝对接。 在实际应用中,为了提高安全性,建议使用更复杂的加密模式如CBC(Cipher Block Chaining)或CFB(Cipher Feedback),并且可以使用...

    AES/CBC/PKCS5PADDING/128加密解密

    这是一个Android开发中的文本加密解密工具类,使用AES128对称加密算法,该资源是一个AndroidStudio3.1版本写的工程,其中包含一个工具类和一个调试活动界面,可解压后直接运行。这个是我为公司项目写的与服务器端...

    Java实现AES CBC PKCS7Padding加解密.docx

    总的来说,Java实现AES CBC PKCS7Padding加解密,需要依赖如BouncyCastle这样的第三方库来扩展Java的加密功能。通过编写自定义工具类,可以方便地进行加解密操作,但在实际使用中,还需要注意安全性、错误处理以及...

    c++ AES 兼容 JAVA AES CBC PKCS5Padding C#

    公司有用C#写的AES代码 又有用JAVA AES CBC PKCS5Padding 加密的 但对于由JAVA AES CBC PKCS5Padding 加密的数据C++解密的资料极为稀缺 故本人找到了一些资源 同时改写了一些填充方式 使得与JAVA C#兼容 VS2010 测试...

    Java实现AES/CBC/PKCS7Padding加解密的方法

    Java实现AES/CBC/PKCS7Padding加解密的方法是指使用Java语言实现AES对称加密算法的加解密过程,其中包括了加密和解密两个步骤。AES是一种对称加密算法,使用同一个密钥进行加密和解密操作。 在Java中,AES加解密...

    AES/ECB/PKCS5Padding C++实现

    在描述中提到的“AES/ECB/PKCS5Padding”是指AES加密算法的一个特定模式和填充方式。 **ECB(电子密码本)**是AES加密的一种模式,是最简单的加密模式。在ECB模式下,输入的数据被分割成128位的块进行独立加密,不...

    java aes加密转换Base64 使用 CBC 解密模式

    java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...

    C++和JAVA,AES/ECB/PKCS5Padding 互通

    这里的“C++和JAVA,AES/ECB/PKCS5Padding 互通”指的是使用相同的加密算法,即高级加密标准(AES)的电子密码本模式(ECB)和PKCS5填充(Padding)来实现两个不同平台之间的数据安全传输。AES是一种广泛使用的对称...

    AES_ECB_PKCS5Padding openssl加解密方式

    由于业务需求需要对接java接口,对方接口采用AES/ECB/PKCS5Padding加密技术,还经过,16进制转换,php端采用openssl加解密方式。调试可以访问http://tool.chacuo.net/cryptaes

    Java端AES/CBC/PKCS5Padding加解密代码

    Java端AES/CBC/PKCS5Padding加解密代码,与Python端from cryptography.fernet import Fernet模块的加解密保持一致,两端加密后的数据互通,本代码仿照Fernet的加解密流程进行移植。

    AES_CBC_PKCS5加解密 MD5加密

    AES(Advanced Encryption Standard)即高级加密标准,是一种广泛应用的块密码算法,而CBC(Cipher Block Chaining)模式和PKCS5(Public Key Cryptography Standards #5)填充模式是AES加密中常用的模式和填充方式...

    AES-CBC-PKCS7Padding-:AESCBCPKCS7Padding加密的实现

    AES/CBC/PKCS7Padding加密的实现一些情况下,客户端要与服务端通信会加密。常会要到加密算法AES(Advanced Encryption Standard),下面是Python和PHP的实现。Python需要安Crypto库(pip install pycrypto或访问)PHP...

    AES-128 ECB pkcs5padding

    解密后,需要移除PKCS5Padding的填充。 7. **错误检查**:在解密后,验证填充是否正确,防止数据被篡改。 **安全性考虑** 尽管AES-128 ECB pkcs5padding在某些场景下能提供良好的加密效果,但其安全性主要取决于...

    JAVA实现AES加密和解密

    在提供的压缩包文件"java aes加密、解密"中,应该包含了一个完整的Java项目,包含了上述所有步骤的代码示例,并且每个方法都有详细的注释,可以直接运行查看效果。这个项目无需任何额外的插件,只需要Java环境即可...

    Qt AES算法ECB模式 PKCS5Padding 128bit

    本文将详细讲解标题"Qt AES算法ECB模式 PKCS5Padding 128bit"所涉及的知识点,以及如何在Qt环境下实现AES加密解密。 **AES算法** AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密...

Global site tag (gtag.js) - Google Analytics