加密解密

AES加密解密

送分小仙女□ 提交于 2020-04-01 05:51:56
在网络请求中许多项目用到了AES加密解密,最近遇到了就顺便写下来,方便记忆。 1、首先下载AESCrypt第三方库,下载下来后编译会报错,需把NSData + CommonCypto.m这个文件添加-fon-objc-arc 2.导入头文件#import "AESCrypt.h" NSString *str = @"uiuberug823u8gno3"; (随意写一个密码) //加密可对字符串,字典等类型进行加密 NSString *string = @"hello"; //对string进行加密 NSString *encstring = [AESCrypt encrypt:string password:str]; //解密 NSString *decstring = [AESCrypt decrypt:encstring password:str]; 来源: https://www.cnblogs.com/ganjinjin/p/5075588.html

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

ios采用自带库加密解密,及php平台、java平台(andriod)数据加密解密的调试

孤者浪人 提交于 2020-03-21 10:25:10
IOS:引入ios自带库 #include 先以DES加密算法为例讲解,DES的加密和解密都同用一个Key,下面两个加解密函数如下: //加密 -(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key { //一般对加密的字符串采用UTF-8编码 NSData存储的就是二进制数据 NSData *data = [clearText dataUsingEncoding: NSUTF8StringEncoding allowLossyConversion:YES]; //See the doc: For block ciphers, the output size will always be less than or //equal to the input size plus the size of one block. //确定加密过后的字符串在内存中存放的大小,根据文档,对于块密码方式(这个库还包括流密码方式) //加密过后的字符串大小总是小于或等于加密之前数据的大小加上对应加密算法的块大小 //但看到一些大牛还这样一下 & ~(kCCBlockSizeDES - 1) 目前不知道为嘛 size_t bufferSize = ([data length] + kCCBlockSizeDES) &

字符串移位加密解密

你说的曾经没有我的故事 提交于 2020-01-26 18:08:59
加密:将字符串"a-z"往左循环移k位 解密:将字符串"a-z"往右循环移k位 /*************************************************************** *Name :StringEncrypt *Fun :字符串加密 *InputParaments :data是待加密的数据;k代表循环往左移k位 *OutputParaments :None ****************************************************************/ void StringEncryp(char* data, int k) { char* p = data; k = k % 26; while (*p) { *p = *p - k < 'a' ? *p - k+26 : *p - k; p++; } } /*************************************************************** *Name :StringDecrypt *Fun :字符串解密 *InputParaments :data是待解密的数据;k代表循环往右移k位 *OutputParaments :None *******************************************

公钥私钥加密解密数字证书数字签名详解

*爱你&永不变心* 提交于 2020-01-13 12:02:34
决心花一些时间,将这些概念和使用的过程彻底弄清楚。最先找到的文章是: 数字签名是什么? (阮一峰博客),读了一遍,又找了一些资料,终于把这些概念弄清楚了,这里整理记录一下。 首先明确几个基本概念: 1、密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。 2、公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。 3、私钥,如上,用来解密公钥加密的数据。 4、摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。 5、签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。 6、签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。 上面实际上介绍了加密解密和数字签名两个概念和实现过程,二者的过程正好是相反的。 在签名的过程中,有一点很关键,收到数据的一方,需要自己保管好公钥,但是要知道每一个发送方都有一个公钥,那么接收数据的人需要保存非常多的公钥,这根本就管理不过来

PHP的MD5加密解密函数

亡梦爱人 提交于 2020-01-08 04:34:16
function encode($code,$seed = "qh8.net", $safe = false){ if ($safe) $code = base64_encode(strrev(str_rot13($code))); $c_l = strlen($code); $s_m = md5($seed); $s_l = strlen($m); $a=0; while ($a <$c_l){ $str .= sprintf ("%'02s",@base_convert(ord($code{$a})+ord($s_m{$s_l % $a+1}),10,32)); $a++; } return $str;//wordwrap($str, 80, "n", true) } function decode($code, $seed = 'qh8.net', $safe = false){ //$code = preg_replace("'[ rnt]+'", '', $code); preg_match_all("/.{2}/", $code, $arr); $arr = $arr[0]; $s_m = md5($seed); $s_l = strlen($m); $a = 0; foreach ($arr as $value){ $str .= @chr(@base_convert

AES后端加密解密数据CBC模式

℡╲_俬逩灬. 提交于 2019-12-26 19:32:31
AES后端加密解密数据CBC模式 今天项目有用到加密登陆密码,实际业务是前端加密,后端解密,主要使用的是AES进行解密 主要maven依赖 < dependency > < groupId > commons - codec < / groupId > < artifactId > commons - codec < / artifactId > < version > 1.10 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - lang3 < / artifactId > < version > 3.4 < / version > < / dependency > 上代码 public class AESUtil { //密钥 (需要前端和后端保持一致)要求16位 private static final String KEY = "12345678910abcde" ; //偏移量(CBC模式需要,需要前端和后端保持一致)要求16位 private static final String IV = "12345678910abcde" ; //具体算法/加密模式/补码方式 private

java加密解密

空扰寡人 提交于 2019-12-20 04:26:05
public class Example_4 { public static void main(String[] args) { //异或a1^A char a1 = '十', a2 = '点', a3 = '进', a4 = '攻'; char secret = 'A'; a1 = (char)(a1^secret); a2 = (char)(a2^secret); a3 = (char)(a3^secret); a4 = (char)(a4^secret); System.out.println("密文:"+a1+a2+a3+a4); //异或a1^A^A a1 = (char)(a1^secret); a2 = (char)(a2^secret); a3 = (char)(a3^secret); a4 = (char)(a4^secret); System.out.println("原文:"+a1+a2+a3+a4); } } 来源: CSDN 作者: 八爪蜘蛛 链接: https://blog.csdn.net/qq_42952437/article/details/103615089

理解AES加密解密的使用方法

北城以北 提交于 2019-12-05 16:03:51
很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难。 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法。最后给出例子来帮助理解AES加密解密的使用方法。 AES的麻烦 相比于其他加密,AES加密似乎模式很多,包括ECB、CBC等等等等,每个模式又包括IV参数和Padding参数,并且,不同语言对AES加密的库设计有区别。这些导致AES加密在不同人之间联调会很麻烦。 AES属于块加密 不难理解,对越长的字符串进行加密,代价越大,所以通常对明文进行分段,然后对每段明文进行加密,最后再拼成一个字符串。块加密的一个要面临的问题就是如何填满最后一块?所以这就是PADDING的作用,使用各种方式填满最后一块字符串,所以对于解密端,也需要用同样的PADDING来找到最后一块中的真实数据的长度。 加密模式 AES分为几种模式,比如ECB,CBC,CFB等等,这些模式除了ECB由于没有使用IV而不太安全,其他模式差别并没有太明显,大部分的区别在IV和KEY来计算密文的方法略有区别。具体可参考 WIKI的说明 。 另外,AES分为AES128,AES256等,表示期待秘钥的长度,比如AES256秘钥的长度应该是256/8的32字节,一些语言的库会进行自动截取,让人以为任何长度的秘钥都可以。而这其实是有区别的。 IV的作用 IV称为初始向量,不同的IV加密后的字符串是不同的