AES CBC 128的实现

原由

AES已经变成目前对称加密中最流行算法之一,AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。

项目中需要使用AES对密码信息进行加密,由嵌入式设备使用C语言进行加密,通过服务器中转后,由Android APP完成解密。

个人自测使用python完成。

Python代码

 1 import base64
 2 import traceback
 3 from Crypto.Cipher import AES
 4 from Crypto import Random
 5 from clint.textui import colored
 6 class AESCipher:
 7     def __init__( self, key ):
 8         self.key = key
 9         self.bs = 16
10         self.iv = ‘1234567812345678‘
11
12     def _pad(self, s):
13         return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
14
15     def _unpad(self, s):
16         return s[:-ord(s[len(s)-1:])]
17
18     def encrypt( self, raw ):
19         raw = self._pad(raw)
20         cipher = AES.new( self.key, AES.MODE_CBC, self.iv )
21         return base64.b64encode(  cipher.encrypt( raw ) )
22
23     def decrypt( self, enc ):
24         enc = base64.b64decode(enc)
25         assert enc!=None
26         cipher = AES.new(self.key, AES.MODE_CBC, self.iv )
27         assert cipher!=None
28         #return self._unpad(cipher.decrypt( enc))
29         return cipher.decrypt(enc)
30
31 if __name__=="__main__":
32     aes=AESCipher(‘1234567812345678‘)
33
34     try:
35         plaintext = "1234qwer"
36         encrypt_data = aes.encrypt(plaintext)
37         print colored.green("encrypt: %s"%(encrypt_data))
38         decrypt_data = aes.decrypt(encrypt_data)
39         print colored.green("decrypt: %s"%(decrypt_data))
40     except Exception,e:
41         print e
42         traceback.print_exc()
43         del aes

作者

阿曾([email protected])

时间: 2024-08-27 21:52:56

AES CBC 128的实现的相关文章

php AES cbc模式 pkcs7 128位加密解密(微信小程序)

PHP AES CBC模式PKCS7 128位加密 加密: $key = '1234567812345678'; $iv = '1234567890123456'; $message = '123456'; $blocksize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $len = strlen($message); //取得字符串长度 $pad = $blocksize - ($len % $blocksiz

PHP AES cbc模式 pkcs7 128加密解密

今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密.这里简单写一个demo class Model_Junjingbao extends Model { private static $_partnerKey = '6d70a09e4d0f8095'; //获取库存,更新价格信息 public static function test($productId=2780) { $data = array( 'productId'=>$productId, 'startTime'=>

java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法

在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里面支持PKCS7Padding填充. 説辣么多不如上代码: public class AESUtil { /** * Encodes a String in AES-256 with a given key * * @param context * @param password * @param

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[] ,是直接转

AES CBC/CTR 加解密原理

So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in this case, using AES as the cipher). Basically, Cipher-Block-Chaining means that previous to putting the cleartext data block into the cipher itself (

Java 使用AES/CBC/PKCS7Padding 加解密字符串

介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充,需要用到bouncycastle组件来实现 所以需要一个jar 来支持.bcprov-jdk16-146.jar 下载地址:http://central.maven.org/maven2/org/bouncycastle/bcprov-jdk16/1.46/bcprov-jdk16-1.46.jar

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 p

java aes CBC的填充方式发现

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

linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法

用mapreduce做数据清洗的时候,需要对数据进行解密,加密方法是:AES/CBC/PKCS7Padding,由于java本身不支持,需要添加依赖,用的依赖是: 1 <dependency> 2 <groupId>org.bouncycastle</groupId> 3 <artifactId>bcprov-jdk15on</artifactId> 4 <version>1.56</version> 5 </dep