AES/CBC/PKCS5Padding对称加密

 1 package unit;
 2 import javax.crypto.Cipher;
 3 import javax.crypto.spec.IvParameterSpec;
 4 import javax.crypto.spec.SecretKeySpec;
 5
 6 import org.apache.commons.codec.binary.Base64;
 7 /**
 8  * AES/CBC/PKCS5Padding 对称加密
 9  * @author jia
10  *
11  */
12 public class AES_CBC {
13
14      private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
15         /**
16          * 数据加密
17          * @param srcData
18          * @param key
19          * @param iv
20          * @return
21          */
22         public static String encrypt(String srcData,byte[] key,byte[] iv)
23         {
24             SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
25             Cipher cipher;
26             String encodeBase64String = null;
27             try {
28                 cipher = Cipher.getInstance(ALGORITHM);
29                 cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv));
30                 byte[] encData = cipher.doFinal(srcData.getBytes());
31                 encodeBase64String = Base64.encodeBase64String(encData);
32             } catch (Exception e) {
33                 e.printStackTrace();
34             }
35             return encodeBase64String;
36         }
37
38         /**
39          * 数据解密
40          * @param encDataStr
41          * @param key
42          * @param iv
43          * @return
44          */
45         public static String decrypt(String encDataStr,byte[] key,byte[] iv)
46         {
47             byte[] encData = Base64.decodeBase64(encDataStr);
48             SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
49             Cipher cipher;
50             byte[] decbbdt = null;
51             try {
52                 cipher = Cipher.getInstance(ALGORITHM);
53                 cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));
54                 decbbdt = cipher.doFinal(encData);
55             } catch (Exception e) {
56                 e.printStackTrace();
57             }
58             return new String(decbbdt);
59         }
60
61     public static void main(String[] args) throws Exception {
62         String str = "fot4Ginq4iey7kLUUmA+dA==";
63         byte[] s = Base64.decodeBase64(str);
64         String s2 = "12345678ilkljklkjv";
65         String iv = "1234567890123456";
66         System.out.println("加密前: "+s2);
67         String encrypt = AES_CBC.encrypt(s2, s, iv.getBytes());
68         System.out.println("加密后: "+new String(encrypt));
69         String decrypt = AES_CBC.decrypt(encrypt, s, iv.getBytes());
70         System.out.println("解密后: "+decrypt);
71     }
72 }
时间: 2024-11-03 05:26:31

AES/CBC/PKCS5Padding对称加密的相关文章

AES —— JAVA中对称加密和解密

package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; impor

php实现AES/CBC/PKCS5Padding加密解密

<?php class MagicCrypt { private $iv = "0102030405060708";//密钥偏移量IV private $encryptKey = "58e15e87488a47c9";//AESkey //加密 public function encrypt($encryptStr) { $localIV = $this->iv; $encryptKey = $this->encryptKey; //Open mo

openssl c AES/CBC/PKCS5Padding 与java代码对应

1 char encrypt_string[4096] = { 0 }; 2 AES_KEY aes; 3 char key[17] = "quck7295abvdefgh"; 4 char iv[17] = "abcdefgh3762quck"; 5 std::string input_string = "45b00417-f7ca-4f53-bced-c1743d85604"; 6 int nLen = input_string.length

java实现AES/CBC/pack5padding加解密算法

最近要测试一个借口,借口的传值参数是使用AES加密,偏移量为0000000000000000,秘钥:12345678901234567890123456789012,加密后内容转成16进制发送,用网上的代码一直没实现,最后发送是因为jre的两个jar包需要升级,支持key大于16位. 两个jar包:US_export_policy.jar.local_policy.jar,下载地址:https://files.cnblogs.com/files/tech-test/security.zip 代码

基于AES对称加密解密的代码块

提供此代码方便自己以后直接查询用,也可以方便其他朋友直接拿来用. 1 import javax.crypto.Cipher; 2 import javax.crypto.spec.IvParameterSpec; 3 import javax.crypto.spec.SecretKeySpec; 4 import sun.misc.BASE64Decoder; 5 import sun.misc.BASE64Encoder; 6 /** 7 * <p>标题: 对称加密解密AES</p&g

JDK自带方法实现AES对称加密

请看代码. 1 package jdbc.pro.lin; 2 3 import java.security.InvalidAlgorithmParameterException; 4 import java.security.InvalidKeyException; 5 import java.security.NoSuchAlgorithmException; 6 7 import javax.crypto.BadPaddingException; 8 import javax.crypto

JAVA AES CBC 加密 解密

AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当参数传入,自己看情况.IV的长度没研究,这里用的是16字符. java PKCS5Padding 对应 C#.NET 的 PKCS7 . 明文,KEY和IV 三者 string 转 byte[] 时要统一编码,如UTF-8. 加密后 cipher.doFinal() 得到密文byte[] ,是直接转

对称加密与非对称加密

(一)对称加密(Symmetric Cryptography) 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB

java aes CBC的填充方式发现

如下的java代码,手动对block进行填充后,使其为16的整数倍后,加密的时候竟然强行再填充了16位,我在尝试用golang实现这段加密时,反复修改了很久,发现golang版的总是比java加密出来并base64的结果少了20位,于是把各个步骤中间结果打出来,发现并没有什么不同,然后尝试在golang后面强行追加了16个填充,那么填充什么呢?没错,我就是从0x0到0x10一个一个试出来的,最后发现当填充16个0x10时,golang跟java的加密结果就完全一样了,下面贴出golang跟jav