`
zhaoshijie
  • 浏览: 2262700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对称加密(AES)加密实现工具类(教程)

 
阅读更多
关键字:对称加密(AES)加密实现工具类(教程)

Java加密解密相关名词(概念)解释(RSA、AES)
错误:java.security.InvalidKeyException: Illegal key size or default parameters解决方法

目前发现AES加密虽然可以大量加密文本速度也很快,但是内存消耗很大,如果需要大量文本加密的同学需要好好评估一下。之后还会贴出非对称加密(RSA)的加密、解密示例,以及.net 与Java间RSA加密的转换。

AES解密、加密工具类例子

import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;

public class AESSecurityUtil {
    /** 密钥算法 */
    private static final String KEY_ALGORITHM = "AES";
    private static final int KEY_SIZE = 128;
    /** 加密/解密算法/工作模式/填充方法 */
//    public static final String CIPHER_ALGORITHM = "AES/ECB/NoPadding";


    /**
     * 获取密钥
     * @return
     * @throws Exception
     */
    public static Key getKey() throws Exception{
        //实例化
        KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
        //AES 要求密钥长度为128位、192位或256位
        kg.init(KEY_SIZE);
        //生成密钥
        SecretKey secretKey = kg.generateKey();
        return secretKey;
    }

    /**
     * 转化密钥
     * @param key 密钥
     * @return Key 密钥
     * @throws Exception
     */
    public static Key codeToKey(String key) throws Exception{
        byte[] keyBytes = Base64.decodeBase64(key);
        SecretKey secretKey = new SecretKeySpec(keyBytes,KEY_ALGORITHM);
        return secretKey;
    }

    /**
     * 解密
     * @param data 待解密数据
     * @param key 密钥
     * @return byte[] 解密数据
     * @throws Exception
     */
    private static String decrypt(byte[] data,byte[] key) throws Exception{
        //还原密钥
        Key k = new SecretKeySpec(key,KEY_ALGORITHM);
        /**
         * 实例化
         * 使用PKCS7Padding填充方式,按如下方式实现
         * Cipher.getInstance(CIPHER_ALGORITHM,"BC");
         */
        Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
        //初始化,设置解密模式
        cipher.init(Cipher.DECRYPT_MODE,k);
        //执行操作
        return new String(cipher.doFinal(data),"UTF-8");
    }

    /**
     * 解密
     * @param data 待解密数据
     * @param key 密钥
     * @return byte[] 解密数据
     * @throws Exception
     */
    public static String decrypt(String data,String key) throws Exception{
        return decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));
    }

    /**
     * 加密
     * @param data 待加密数据
     * @param key 密钥
     * @return bytes[] 加密数据
     * @throws Exception
     */
    public static byte[] encrypt(byte[] data,byte[] key) throws Exception{
        //还原密钥
        Key k = new SecretKeySpec(key,KEY_ALGORITHM);
        /**
         * 实例化
         * 使用PKCS7Padding填充方式,按如下方式实现
         * Cipher.getInstance(CIPHER_ALGORITHM,"BC");
         */
        Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
        //初始化,设置为加密模式
        cipher.init(Cipher.ENCRYPT_MODE,k);
        //执行操作
        return cipher.doFinal(data);
    }

    public static String encrypt(String data,String key) throws Exception{
        byte[] dataBytes = data.getBytes("UTF-8");
        byte[] keyBytes = Base64.decodeBase64(key);
        return Base64.encodeBase64String(encrypt(dataBytes, keyBytes));
    }

    /**
     * 初始化密钥
     * @return
     * @throws Exception
     */
    public static String getKeyStr() throws Exception{
        return Base64.encodeBase64String(getKey().getEncoded());
    }

    public static void main(String[] args) throws Exception{
        String key = "VxDksHQiTvQt9MMPtMVXdA==";
        String wenjian = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<mainData>\n" +
                "<config>\n" +
                "     <operate>1</operate>                  <!--0:删除,1:新增,2:修改-->\n" +
                "</config>\n" +
                "<dataList type=\"personnel\">\n" +
                "     <data id=\"员工主数据主键\">            <!--默认主数据代码-->\n" +
                "       <code></code>                       <!--代码-->\n" +
                "       <name></name>                       <!--姓名-->\n" +
                "       <sex></sex>                         <!--性别-->\n" +
                "       <birthday></birthday>               <!--出生日期-->\n" +
                "       <education></education>             <!--文化程度-->\n" +
                "       <idNumber></idNumber>               <!--身份证号码-->\n" +
                "       <entryDate></entryDate>             <!--入职日期-->\n" +
                "       <departureDate></departureDate>     <!--离职日期-->\n" +
                "       <address></address>                 <!--住址-->\n" +
                "       <phoneNumber></phoneNumber>         <!--电话-->\n" +
                "       <mobilePhoneNumber></mobilePhoneNumber><!--移动电话-->\n" +
                "       <email></email>                     <!--电子邮件-->\n" +
                "       <position></position>               <!--职务-->\n" +
                "       <maritalStatus></maritalStatus>     <!--婚姻状况-->\n" +
                "       <partyAffiliation></partyAffiliation><!--政治面貌-->\n" +
                "       <username></username>               <!--用户名-->\n" +
                "       <sortNo></sortNo>                   <!--排序号-->\n" +
                "       <status></status>                   <!--状态-->\n" +
                "       <department></department>           <!--所属部门-->\n" +
                "       <company></company>                 <!--所属公司-->\n" +
                "    </data>\n" +
                "</dataList>\n" +
                "</mainData>";
        StringBuffer buffer = new StringBuffer();
        for(int index = 0;index < 20000;index ++){
            buffer.append(wenjian);
        }
        String jimm = buffer.toString();
        
        String mw = AESSecurityUtil.encrypt(jimm,key);
        System.out.println("密文:" + mw);

        String jm = AESSecurityUtil.decrypt(mw,key);
        System.out.println("明文:" + jm);
    }
}
分享到:
评论

相关推荐

    AES对称加密工具类

    AES对称加密工具类,本工具类已经测试通过,不需要额外依赖,直接copy即可使用

    qt5AES加密,ES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推

    在Qt5中,可以使用QCryptographicHash和QByteArray等类来实现AES加密。首先,需要创建一个密钥,然后使用QCryptographicHash将密钥扩展为所需的长度。接着,使用QCryptographicHash的hash方法生成初始向量(IV)。...

    AES对称加密java工具类

    适用于java开发者使用,用于对称加密的数据。进行加密。

    Java AES对称加密工具类Utils

    综合网上的AES加密,把其做成一个工具类,方便加密解密的实现

    AES256加密工具类,及其所必须的jar包

    AES256加密工具类是信息安全领域中一个重要的实用组件,它主要负责对数据进行加密保护,确保数据在传输或存储过程中的安全。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,提供了强大的安全性...

    JAVA实现AES加密解密工具类

    总之,AES加密解密工具类在Java中实现涉及对Cipher类的熟练使用,理解加密模式和填充策略,以及正确管理和生成密钥和初始化向量。这个工具类使得开发者能够方便地在项目中集成加密功能,保障数据的安全。

    RSA+AES 加密工具类 Java

    在这个“RSA+AES加密工具类 Java”中,我们将深入探讨这两种加密技术以及如何在Java环境中,包括Android和Web应用,实现它们。 首先,RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,基于大整数因子分解的困难...

    JAVAAES对称加密工具类

    在这个"JAVAAES对称加密工具类"中,我们主要探讨的是如何在Java中实现AES加密,并通过`EncryptUtil.java`这个类来处理字符串和文件流的加密操作。 AES加密算法基于替换和置换的过程,分为四个主要步骤:SubBytes、...

    C# AES加密解密小工具

    本项目“C# AES加密解密小工具”提供了一个简单的AES ECB模式加密和解密实现,适用于对文本文件进行安全处理。 首先,AES是一种块密码,它将明文分成128位的块进行操作。ECB(Electronic Codebook)模式是最基础的...

    对称加密 非对称加密 需要的jar包

    在Java编程环境中,我们可以使用如`javax.crypto`包中的类来实现对称加密,例如AES(Advanced Encryption Standard)算法。AES是一种广泛应用的对称加密标准,提供了不同长度的密钥(128位、192位和256位),具有较...

    rsa+aes加密传输工具类及案例

    在IT行业中,加密技术是确保数据安全的重要手段。本文将详细介绍RSA和AES两种加密算法以及它们在实际应用中...通过编写和使用加密工具类,我们可以便捷地将这些理论知识应用于实践,保护我们的系统免受潜在的安全威胁。

    aes对称加密所需jar

    在压缩包子文件的文件名称列表中,虽然没有具体的文件名,但可以假设这些文件包含了实现AES加密的必要库或工具。可能包含的是Bouncy Castle等开源库,它们提供了更广泛的加密算法支持,包括各种AES模式(如ECB、CBC...

    用C++开源库cryptopp 封装的Aes对称加密

    本篇文章将深入探讨如何使用C++开源库Cryptopp来封装Aes对称加密,并且特别关注如何在Android和Java平台上实现该功能。 Cryptopp是一个强大的、免费的C++类库,提供了多种加密、解密、哈希和伪随机数生成算法,包括...

    Qt实现AES加密解密

    在Qt中,我们可以利用QCryptographicHash、QByteArray和QBuffer等类来实现AES加密和解密。 1. **AES加密算法**: AES有三种不同的密钥长度,即128位(AES_128)、192位(AES_192)和256位(AES_256)。这些长度的选择直接...

    java编写的加密解密工具,有对称加密和非对称加密

    使用Java的`javax.crypto`包可以方便地实现AES加密和解密。 非对称加密则使用两个不同的密钥,一个公开的公钥用于加密,一个私有的私钥用于解密。这种加密方式的安全性更高,因为即使公钥被截获,也无法据此推算出...

    AES与RSA加密工具类

    "AES与RSA加密工具类"涉及的是两种广泛使用的加密算法:高级加密标准(AES)和 Rivest-Shamir-Adleman(RSA)。这两者在保护敏感信息、确保数据隐私以及构建安全的通信通道中扮演着关键角色。 AES,全称为Advanced ...

    使用openssl中aes加密算法实现文件的加密解密(源代码)

    ### 使用OpenSSL中的AES加密算法实现文件的加密与解密 #### 一、概述 本文档将详细介绍如何使用OpenSSL库中的AES加密算法对文件进行加密和解密操作。主要聚焦于EVP_aes_128_ecb和EVP_aes_256_ecb两种模式,并提供...

    Qt中可用的AES加密程序.zip

    在IT领域,加密技术是确保数据安全的重要手段之一,而AES(Advanced Encryption Standard)作为一项广泛应用的对称加密算法,其高效性和安全性被广大开发者所信赖。本项目以Qt为开发环境,提供了一个AES加密程序的...

    kotlin 加密算法工具类

    在Kotlin中,可以使用Java Cryptography Extension (JCE)库来实现AES加密。AES的基本工作流程是将明文数据块通过密钥转化为密文,解密时则反之。AES支持不同长度的密钥,如128位、192位和256位,其中128位是最常见的...

    java RAS非对称公私密钥加密+AES公私密钥加密+过滤器入口出口统一处理

    总结,Java中的RSA非对称加密和AES对称加密是数据安全的重要工具,而过滤器则为统一处理数据提供了方便。通过学习和实践这些技术,开发者可以构建更安全、可靠的网络应用。在实际应用中,应根据项目需求选择合适的...

Global site tag (gtag.js) - Google Analytics