aes

java web与android互通的aes算法

醉酒当歌 提交于 2020-04-25 02:19:44
####Java实现代码 //可自定义保证16btye即可 private static final byte[] IV = {16, 26, -35, 23, 34, 125, -5, -4, -8, -9, -15, -78, 90, -8, -99, 100}; public static byte[] encrypt(String content, String password) { try { SecretKeySpec key = getKey(password);//根据密码生成key if(key == null){ return null; } Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// 创建密码器"算法/模式/补码方式" byte[] byteContent = content.getBytes("utf-8"); cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV));//初始化,使用该模式,需要一个向量16byte的IvParameterSpec byte[] result = cipher.doFinal(byteContent);// 加密 return result; } catch

IllegalArgumentException: IV buffer too short for given offset/length combination

帅比萌擦擦* 提交于 2020-04-17 12:38:13
问题 I have one application which is in PHP encrypting text using openssl_encrypt with following method. (Using same value for salt and iv as '239422ae7940144f') function encrypt_password($password) { define('AES_256_CBC', 'aes-256-cbc'); $sessionId = $password; //random number for encrtyption(salt) $salt = '239422ae7940144f'; $iv = $salt; //cipher length $encryptedSession = openssl_encrypt($sessionId, AES_256_CBC, $salt, 0, $iv); return array('encryptedPassword' => $encryptedSession, 'salt' =>

IllegalArgumentException: IV buffer too short for given offset/length combination

大城市里の小女人 提交于 2020-04-17 12:36:35
问题 I have one application which is in PHP encrypting text using openssl_encrypt with following method. (Using same value for salt and iv as '239422ae7940144f') function encrypt_password($password) { define('AES_256_CBC', 'aes-256-cbc'); $sessionId = $password; //random number for encrtyption(salt) $salt = '239422ae7940144f'; $iv = $salt; //cipher length $encryptedSession = openssl_encrypt($sessionId, AES_256_CBC, $salt, 0, $iv); return array('encryptedPassword' => $encryptedSession, 'salt' =>

无聊系列 - 教你怎么正确处理异常

自作多情 提交于 2020-04-08 10:51:48
在工作中,常遇见乱处理Exception的情况: 要么吞掉异常,不打印任何日志; 要么记录日志时,日志级别不对、或者把重要的出错堆栈信息干掉,在做生产问题排查时,简直让人抓狂。 我这篇博文,也是对记录的一个开源组件,对异常自行K掉,造成我排查耗费了好久的时间--。 https://www.cnblogs.com/chongsha/p/11931109.html 下面我们用一段代码对 1 进行举例,该代码是网上随便搜的,原作者请勿见怪。 1 /* 2 * 加密 3 * 1.构造密钥生成器 4 * 2.根据ecnodeRules规则初始化密钥生成器 5 * 3.产生密钥 6 * 4.创建和初始化密码器 7 * 5.内容加密 8 * 6.返回字符串 9 */ 10 public static String AESEncode(String encodeRules,String content){ 11 try { 12 //1.构造密钥生成器,指定为AES算法,不区分大小写 13 KeyGenerator keygen=KeyGenerator.getInstance("AES"); 14 //2.根据ecnodeRules规则初始化密钥生成器 15 //生成一个128位的随机源,根据传入的字节数组 16 keygen.init(128, new SecureRandom

13种加密与解密算法【一】

二次信任 提交于 2020-04-04 12:57:47
这15种加密解密算法分别是:散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。 【三种分类】 1、对称加密:密钥只有一个,解密、解密都是这个密码,加解密速度快,典型的对称加密有DES、AES、RC4等 2、非对称加密:密钥成对出现,分别为公钥和私钥,从公钥无法推知私钥,反之,从私钥也无法推知公钥,加密和解密使用不同的密钥,公钥加密需要私钥解密,反之,私钥加密需要公钥解密。非对称加密速度较慢,典型的非对称算法有:RSA,DSA,DSS. 3、Hash算法,这是一种不可逆的算法,它常用于验证数据的完整性。 【1、MD5加密解密】 md5是不可逆的,md5没有解密的方法,最好的反驳就是:数据源是无穷尽的,而 MD5密文是有限的。这里的加密解密是对md5算法先加密后解密,而不是对md5解密。 md5加密原理 MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 // MD5加密,32位 public static String MD5(String str) { MessageDigest md5 = null;

Python 的AES加密与解密

不想你离开。 提交于 2020-03-28 02:46:38
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows 下使用AES时要安装的是pycryptodome 模块 pip install pycryptodome python 在 Linux 下使用AES时要安装的是pycrypto模块 pip install pycrypto CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量) ECB加密不需要iv AES CBC 加密的python实现 1 from Crypto.Cipher import AES 2 from binascii import b2a_hex, a2b_hex 3 4 5 # 如果text不足16位的倍数就用空格补足为16位 6 def add_to_16(text): 7 if len(text.encode('utf-8')) % 16: 8 add = 16 - (len(text.encode('utf-8')) % 16) 9 else: 10 add = 0 11 text = text + ('\0' * add) 12 return text.encode('utf-8') 13 14 15 # 加密函数 16 def encrypt(text)

python AES 双向对称加密解密

蹲街弑〆低调 提交于 2020-03-28 00:45:02
python AES加密解密 python AES 双向对称加密解密 Python中进行Base64编码和解码 # encoding:utf-8 import base64 from Crypto.Cipher import AES from Crypto import Random def encrypt(data, password): bs = AES.block_size pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs) iv = Random.new().read(bs) cipher = AES.new(password, AES.MODE_CBC, iv) data = cipher.encrypt(pad(data)) data = iv + data return data def decrypt(data, password): bs = AES.block_size if len(data) <= bs: return data unpad = lambda s : s[0:-ord(s[-1])] iv = data[:bs] cipher = AES.new(password, AES.MODE_CBC, iv) data = unpad(cipher.decrypt(data

Aes_ECB+bash64 加密

我们两清 提交于 2020-03-25 20:23:37
Aes_ECB+bash64 加密 import base64 from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from Crypto import Random import binascii class Aes_ECB(object): def __init__(self, key): self.key = key self.MODE = AES.MODE_ECB self.BS = AES.block_size self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS) self.unpad = lambda s: s[0:-ord(s[-1])] # str不是16的倍数那就补足为16的倍数 def add_to_16(value): while len(value) % 16 != 0: value += '\0' return str.encode(value) # 返回bytes def AES_encrypt(self, text): aes = AES.new(Aes_ECB.add_to_16(self.key), self.MODE) #

公钥,私钥和数字签名这样最好理解

匆匆过客 提交于 2020-03-25 05:54:01
一、 公钥 加密 假设一下,我找了两串数字,一串是1*,一串是2*。我喜欢2*这串数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1*是我的公钥。 我有一个文件,不能让别人看,我就用1*加密了。别人找到了这个文件,但是他不知道2*就是解密的私钥啊,所以他解不开,只有我可以用 串2*,就是我的私钥,来解密。这样我就可以保护数据了。 我的好朋友x用我的公钥1*加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2*就是我的私钥, 只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。 二、 私钥 签名 如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2*是我的私钥),结果所有的人都看到我的内容了,因为他们都知 道我的公钥是1*,那么这种加密有什么用处呢? 但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2*,加密,加密后的内容是d,发给x,再告诉他 解密看是不是c。他用我的公钥1*解密,发现果然是c。 这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是 数字签名 。 总结:公钥和私钥是成对的

How to decrypt AES with SJCL

十年热恋 提交于 2020-03-24 11:41:12
问题 I want to decrypt AES by given cipher and key with the Stanford Javascript Crypto Library (SJCL), but i can't pass the key: var key = 'key'; var cipher = 'abjslö'; var aes = new sjcl.cipher.aes(key); var plaintext = aes.decrypt(cipher); alert(plaintext); This dosen't work. Referred to the documentation, the key has to be "an array of 4, 6 or 8 words". How could this be done? 回答1: The key has to be an AES key, which is 128, 192 or 256 bits. The SJCL library however operates on 32 bit machine