`

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/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING

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

    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++...

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

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

    Qt AES算法ECB模式 PKCS5Padding 128bit

    最近找Qt下可用的与java通用的AES加密解密代码。 openssl不是很好用(不会和Qt编译到一起。。。) 所以参考网上的资料,终于找到了一个C++可用的代码,稍作修改。

    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++...

    Delphi7AES加密解密与JAVA互转(默认128位+ECB+PKCS5Padding+先BASE64再HEX)

    Delphi7可与JAVA互转的AES加密解密算法(默认128位+ECB+PKCS5Padding+先BASE64再HEX),保证纯源码(ElAES基础上并参考大牛代码),不带任何控件。

    Delphi AES 算法

    本组代码采用标准AES算法(基础算法引用ElAES.pas,感谢作者),代码支持AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充,Delphi与JAVA互相加解密。加密前Delphi与JAVA统一字符编码...

    JavaScript AES 加密例子

    AES/ECB/PKCS5Padding ——-32 ——————————-16 AES/ECB/ISO10126Padding ——-32 ——————————- 16 AES/OFB/NoPadding ——-16 ——————————-原始数据长度 AES/OFB/PKCS5Padding ——- 32 ...

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

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

    Delphi与JAVA互加解密AES算法

    本组代码采用标准AES算法(基础算法引用ElAES.pas,感谢作者),代码支持AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充,Delphi与JAVA互相加解密。

    JAVA实现AES加密和解密

    1.采用秘钥为16位长度的加密字符 2.加密算法为AES/ECB/PKCS5Padding 3.解决加解密乱码问题 4.完整的线上可运行代码及各方法及步骤注释 5.无任何插件,java环境直接运行

    delphi 实现AES加/解密

    AES 是一种使用安全码进行信息加密的标准。 它支持 128 位、192 位和 256 位长度的密匙。 加密算法的实现在 ElAES.pas 单元中。 本人将其加密方法封装在 AES.pas 单元中, 只需要调用两个标准函数就可以完成字符串...

    JAVA AES 加密算法

    JAVA AES 加密算法 javax.crypto.Cipher AES/ECB/PKCS5Padding

    基于stm32f030单片机的AES128bit加解密算法例程

    该算法我已经验证通过并做了部分优化,该算法的加解密方式为AES-128bit/ECB/PKCS5Padding AES加密过程是先通过key进行加密,然后利用base64方式编码变成了最终的密文。 解密过程正好相反,是先利用base64方式解码,...

    AES128 ECB、CBC模式加密解密函数(C语言实现 -单片机/嵌入式)

    基于c语言实现AES128_ECB、AES128_CBC两种模式加密,数据使用PKCS7Padding算法对齐,程序已验证

Global site tag (gtag.js) - Google Analytics