`

Java利用 AES/ECB/PKCS5Padding 算法加解密

    博客分类:
  • java
阅读更多

对称加密、解密

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder; 
 
/**
* AES加解密
*/
public class AES { 
 
    /**
     * 密钥算法
     */ 
    private static final String ALGORITHM = "AES"; 
    /**
     * 加解密算法/工作模式/填充方式
     */ 
    private static final String ALGORITHM_STR = "AES/ECB/PKCS5Padding"; 
 
    /**
     * SecretKeySpec类是KeySpec接口的实现类,用于构建秘密密钥规范
     */ 
    private SecretKeySpec key; 
 
    public AES(String hexKey) { 
        key = new SecretKeySpec(hexKey.getBytes(), ALGORITHM); 
    } 
 
    /**
     * AES加密
     * @param data
     * @return
     * @throws Exception
     */ 
    public String encryptData(String data) throws Exception { 
        Cipher cipher = Cipher.getInstance(ALGORITHM_STR); // 创建密码器 
        cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化 
        return new BASE64Encoder().encode(cipher.doFinal(data.getBytes())); 
    } 
 
    /**
     * AES解密
     * @param base64Data
     * @return
     * @throws Exception
     */ 
    public String decryptData(String base64Data) throws Exception{ 
        Cipher cipher = Cipher.getInstance(ALGORITHM_STR); 
        cipher.init(Cipher.DECRYPT_MODE, key); 
        return new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(base64Data))); 
    } 
 
    /**
     * hex字符串 转 byte数组
     * @param s
     * @return
     */ 
    private static byte[] hex2byte(String s) { 
        if (s.length() % 2 == 0) { 
            return hex2byte (s.getBytes(), 0, s.length() >> 1); 
        } else { 
            return hex2byte("0"+s); 
        } 
    } 
 
    private static byte[] hex2byte (byte[] b, int offset, int len) { 
        byte[] d = new byte[len]; 
        for (int i=0; i<len*2; i++) { 
            int shift = i%2 == 1 ? 0 : 4; 
            d[i>>1] |= Character.digit((char) b[offset+i], 16) << shift; 
        } 
        return d; 
    } 
 
    public static void main(String[] args) throws Exception { 
        AES util = new AES("abcdefghijklmnop"); // 公开密钥 
        System.out.println("cardNo:"+util.encryptData("1234_abcd")); // 加密 
        System.out.println("exp:"+util.decryptData("Qd05HTY/pEPi2h9+PFXN9g==")); // 解密 
    } 
}
分享到:
评论

相关推荐

    AES/ECB/PKCS5Padding 算法

    AES/ECB/PKCS5Padding 算法,用于数据加密,实现方式为Java。AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准

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

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

    对接java AES/ECB/PKCS7Padding加密

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

    AES/ECB/PKCS5Padding C++实现

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

    c/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING

    最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...

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

    AES/CBC/PKCS5Padding的加解密在多平台实现中都需要遵循相同的步骤,但具体的实现细节会因语言环境而略有不同。理解这些概念对于开发安全的应用程序至关重要,尤其是在涉及敏感数据传输和存储时。无论是在JavaScript...

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

    本主题主要探讨的是如何使用C#实现加密和解密操作,以便与Java应用程序进行无缝对接,特别是使用AES/CBC/PKCS7Padding算法,并将结果转换为16进制表示。下面将详细阐述相关知识点。 **AES(Advanced Encryption ...

    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,更加...

    AES/ECB/PKCS5PADDING

    最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...

    AES-128 ECB pkcs5padding

    AES-128 ECB pkcs5padding 是一种广泛使用的加密技术,主要应用于C++编程环境中的数据安全。本文将深入探讨AES(高级加密标准)、ECB(电子密码本)模式、PKCS5Padding(填充模式)以及它们在C++中的实现。 **AES ...

    Qt AES算法ECB模式 PKCS5Padding 128bit

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

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

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

    JAVA、Python、PHP一致的 "任意长度secret秘钥" 加解密AES/ECB/PKCS5Padding算法实现代码

    我们关注的是使用AES(Advanced Encryption Standard)加密算法的一种特定实现,它在JAVA、Python和PHP三种编程语言中保持一致,支持任意长度的secret秘钥,并采用ECB(Electronic Codebook)模式和PKCS5Padding填充...

    AES/ECB/PKCS5Padding C C++实现

    1. AES/ECB/PKCS5Padding C++实现,输出64位密文; 2.可以和java或是安卓等PKCS5Padding加密算法匹配;

    c/c++ 与java互通 AES加密解密,算法ECB

    最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...

    JAVA实现AES加密和解密

    本文将详细介绍如何使用Java实现AES的加密和解密过程,特别是针对16位长度的秘钥,并解决加解密过程中可能出现的乱码问题。 首先,AES加密算法有多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block ...

    AES 示例(CBC算法模式 PKCS5填充模式)

    这两个环境都需要设置正确的初始化向量(IV),密钥以及选择AES/CBC/PKCS5Padding算法。 Delphi代码示例(简化版): ```delphi uses System.Security.Cryptography; var Cipher: TAESEncrypt; IV, Key: TBytes...

Global site tag (gtag.js) - Google Analytics