`

AES加密与解密

阅读更多
这个其实是我们项目里面的一个工具类,给大家做一下分享

aes工具类如下:

package com.*;
import java.net.URLEncoder;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AesUtil {
    private static BASE64Encoder base64Encoder;
    private static BASE64Decoder base64Decoder;
    private static IvParameterSpec iv;
    private static String CipherType = "AES/CBC/PKCS5Padding"; //"算法/模式/补码方式

    static {
        base64Decoder = new BASE64Decoder();
        base64Encoder = new BASE64Encoder();
        iv = new IvParameterSpec("0102030405060708".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
    }

    // 加密
    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(CipherType);
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("UTF-8"));

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

    // 解密
    public static String Decrypt(String sSrc,String sKey) throws Exception {
    	/*sSrc = new String(sSrc.getBytes(),"UTF-8");*/
        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(CipherType);

            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] encrypted1 = base64Decoder.decodeBuffer(sSrc);//先用base64解密
            try {
                byte[] original = cipher.doFinal(encrypted1);
                return  new String(original,"UTF-8");
            } 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 {
		System.out.println(Encrypt("hello,word","11asd11111111111"));
		System.out.println(Decrypt(String.valueOf("qmesIijZCkQ8YL6GN1YEiQ=="),"11asd11111111111"));
	}
}

分享到:
评论

相关推荐

    AES加密与解密源代码

    AES加密与解密是信息安全领域中的重要技术,用于保护数据的隐私性和安全性。AES,全称为Advanced Encryption Standard,中文名为高级加密标准,是目前广泛采用的对称加密算法。本资源是一个基于Visual Studio 2008和...

    AES加密解密实验报告

    《AES加密解密实验报告》 AES,全称为高级加密标准(Advanced Encryption Standard),是密码学领域中的一个重要标准,由美国联邦政府采纳,用于替换原有的DES加密算法。AES由比利时密码学家Joan Daemen和Vincent ...

    Qt实现AES加密解密

    这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。

    C#实现 AES加密与解密

    AES加密与解密 可设置如 CipherMode.ECB PaddingMode.PKCS7 与线上加解密结果一致

    android使用AES加密和解密文件实例代码

    Android 使用 AES 加密和解密文件实例代码 在 Android 应用程序中,使用 AES(Advanced Encryption Standard)加密和解密文件是一种常见的安全措施。本文将详细介绍 Android 使用 AES 加密和解密文件的实例代码,并...

    Qt实现AES加密和解密

    总之,虽然Qt本身不内置AES加密,但结合第三方库和Qt的现有组件,我们可以方便地实现AES加密和解密,为应用程序提供必要的安全保护。在开发过程中,务必遵循最佳实践,确保数据的完整性和安全性。

    c# AES加密与解密,RSA加密与解密,BouncyCastle.Crypto加密与解密

    在C#中,可以使用System.Security.Cryptography命名空间下的Aes类来实现AES加密和解密。AES的工作模式有ECB(电子密码本)、CBC(链式密码本)、CFB(密文反馈)等,其中CBC模式常用于确保数据的完整性。加密过程...

    基于C++的AES加密和解密代码_基于C++的AES加密和解密代码._

    在C++中实现AES加密和解密,通常会利用已有的库,如OpenSSL、Crypto++等。这些库提供了API接口,使得开发者能够方便地在C++程序中集成AES功能。例如,OpenSSL中的`EVP_EncryptInit_ex()`、`EVP_EncryptUpdate()`和`...

    AES单片机加密解密 C语言源代码

    AES加密解密的C语言源代码能在Keil C51环境下运行,意味着开发者可以将加密模块整合到51单片机的应用程序中。 **STM32** 是意法半导体公司推出的一种基于ARM Cortex-M内核的微控制器系列,其性能强大且功耗低,广泛...

    Java实现AES加密和解密算法

    然而,仅依赖AES加密可能不够安全,因为如果攻击者获取到相同的密钥,他们就能解密数据。因此,通常会结合密钥管理策略,如使用密钥派生函数(KDFs)或密钥协商协议,以及使用非对称加密(如RSA)来安全地交换AES...

    AES加密与解密软件_最新版(2.2.2与2.2.3版 速度与性能上有较大提高).rar

    在加密/解密单文件页面下按下回车键,软件会根据你在按回车键之前最近的几次操作(如:更改待加密文件路径或待解密文件路径或解密后文件的扩展名等等)来自动调用加密与解密函数以实现加密或解密的功能;在加密/解密...

    AES 5.0 版 加密与解密软件 终极版(以后不会再有太大的升级)_各个版本中速度、性能与界面最好

    最近,我忙里偷闲地将原先的AES 4.2 版 加密与解密软件作了一次较大的改动。并将其发布在此与大家分享。 在AES 5.0 版 加密与解密软件中在原先AES 4.2 版 加密与解密软件的基础上作出了以下改进: 1、修改了几...

    JAVA实现AES加密和解密

    总的来说,理解并正确使用Java实现AES加密和解密,需要注意秘钥的生成、工作模式的选择、填充方式以及字符编码的一致性,这样才能确保数据的安全传输和正确解密。通过实际操作和实践,你可以更深入地掌握这些知识点...

    AES加密/解密算法,基于MFC下的 VC6.0

    而“AesCode”可能是一个源代码文件,包含了具体实现AES加密解密功能的C++代码。分析这个代码可以帮助我们理解AES在VC6.0下的具体实现细节,如函数定义、调用流程等。 总的来说,AES加密/解密算法在MFC下的实现涉及...

    matlab实现AES加密和解密算法

    在MATLAB环境中实现AES加密和解密算法是一项重要的技能,特别是在教学和科研中。MATLAB2019a版本提供了丰富的数学计算功能,使得实现这种复杂的算法变得相对简单。 AES的核心过程包括四个基本操作:字节代换...

    AES加密_解密_verilog代码.rar_AES_AES加密_AES加密解密_Verilog AES_aes verilog

    压缩包中的“AES加密_解密_verilog代码.docx”文件很可能是详细介绍了如何用Verilog编写AES加密解密模块的文档,包括具体的代码示例和设计说明。阅读这份文档可以帮助你理解AES算法在Verilog中的实现细节,以及如何...

    AES加密和解密Demo

    本教程将通过"AES加密和解密Demo"这个实例,深入探讨AES的工作原理、实现过程以及如何在实际应用中进行加密和解密。 **AES加密算法简介** AES是由比利时密码学家Joan Daemen和Vincent Rijmen设计的,2001年被美国...

    用C语言实现的AES加密解密算法

    在本项目中,"用C语言实现的AES加密解密算法"是针对AES算法的一种C语言实现,这允许开发者在不依赖特定库的情况下,在C环境中进行数据的加密和解密操作。 首先,我们需要理解AES的工作原理。AES的核心是基于替换和...

Global site tag (gtag.js) - Google Analytics