解密:
NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] decryptString:@"MIoAu+xUEpQZSUmkZUW6JQ==" keyString:@"abc" iv:nil]);
// 输出 haha
AES - CBCģʽ
加密:
uint8_t iv[8] = {1,2,3,4,5,6,7,8};
NSData *data = [[NSData alloc] initWithBytes:iv length:sizeof(iv)];
NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] encryptString:@"haha" keyString:@"abc" iv:data]);
// 输出 E/wWqUTiw/E+1DThAzV39A==
解密:
NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] decryptString:@"E/wWqUTiw/E+1DThAzV39A==" keyString:@"abc" iv:data]);
// 输出 haha
对称加密存在的问题??
由于 aes 是对称密码,信息加密和解密都采用相同的做法和秘钥。有线电视机顶盒 现在先来了解一下有线电视的破解原理,信息是由电视台轮输入的,是加密信息,再通过电信传输,再遂到机顶盒,接着就是需要解密了。首先是数据传输的安全问题:当我们完成了接口对接之后,就会考虑一个问题,当别人进行抓包之后,就能很轻松的知道服务器和客户端传输的数据格式,这样的话,不说服务器攻击,至少会有人利用这些接口做出一大批外挂,本身我们加上弱联网就是为了杜绝作弊现象,于是,我们对传输消息做了加密,先做xxtea加密,再做base64加密,用约定好的秘钥,进行加密解密,进行消息收发。
image
大部分线上抓娃娃app可围观别人抓娃娃,在别人抓娃娃期间可聊天或发送弹幕。http协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此http协议不适合传输一些敏感信息,比如号、密码等。这天,装扮成邮递员的情报工作者又送来了重要的情报:“这次的情报非常重要,这也是我们最后一次送情报,以后我们会通过报纸上的寻人启事来发送……”“好的,我知道了,我一定会不惜一切代价送出去的。

目前的数字信封和数字签名都利用到了非对称加密算法,非对称加密算法是利用一对密钥来完成加解密的工作的,在安全电子邮件中,数字信封中随机生成的用来加密用的对称密钥将使用收件人的公钥来加密,只有拥有对应私钥的收件人才能解密,从而达到确保数据保密性的效果。4,aes 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。aes是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。
鉴于对称加密存在的风险,非对称加密应运而生
特点:
使用公钥加密,使用私钥解密公钥是公开的,私钥保密加密处理安全,但是性能极差
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
经典算法:
RSARSA算法原理
* 求N,准备两个质数p和q,N = p x q * 求L,L是p-1和q-1的最小公倍数。L = lcm(p-1,q-1) * 求E,E和L的最大公约数为1(E和L互质) * 求D,E x D mode L = 1RSA加密实践
* p = 17,q = 19 =>N = 323 * lcm(p-1,q-1)=>lcm(16,18)=>L= 144 * gcd(E,L)=1 =>E=5 * E乘以几可以mode L =1 D=29可以满足 * 得到公钥为:E=5,N=323 * 得到私钥为:D=29,N=323 * 加密 明文的E次方 mod N = 123的5次方 mod 323 = 225(密文) * 解密 密文的D次方 mod N = 225的29次方 mod 323 = 123(明文)openssl生成密钥命令生成强度是 512 的 RSA 私钥:$ openssl genrsa -out private.pem 512以明文输出私钥内容:$ openssl rsa -in private.pem -text -out private.txt校验私钥文件:$ openssl rsa -in private.pem -check从私钥中提取公钥:$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout以明文输出公钥内容:$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text使用公钥加密小文件:$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin使用私钥解密小文件:$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt将私钥转换成 DER 格式:$ openssl rsa -in private.pem -out private.der -outform der将公钥转换成 DER 格式:$ openssl rsa -in public.pem -out public.der -pubin -outform der非对称加密存在的安全问题
原理上看非对称加密非常安全,客户端用公钥进行加密,服务端用私钥进行解密,数据传输的只是公钥,原则上看,就算公钥被人截获,也没有什么用,因为公钥只是用来加密的,那还存在什么问题呢??那就是经典的中间人攻击
image
废了半天劲画的图,太low了,我还是自己总结一遍吧!!!
中间人攻击详细步骤:
客户端向服务器请求公钥信息服务端返回给客户端公钥被中间人截获中间人将截获的公钥存起来中间人自己伪造一套自己的公钥和私钥中间人将自己伪造的公钥发送给客户端客户端将重要信息利用伪造的公钥进行加密中间人获取到自己公钥加密的重要信息中间人利用自己的私钥对重要信息进行解密中间人篡改重要信息(将给客户端转账改为向自己转账)中间人将篡改后的重要信息利用原来截获的公钥进行加密,发送给服务器服务器收到错误的重要信息(给中间人转账)
疑问一:为什么会造成中间人攻击??
造成中间人攻击的直接原因就是客户端没办法判断公钥信息的正确性。
疑问二:怎么解决中间人攻击??
对不封口的书信(如明信片、贺年片、柬帖以及托人带交的便信便条等), 封文中不写“启”“缄”,因为不存在拆封和封闭的问题。(1)证明信是以机关(或团体)、个人的名义证明某人身份、经历或证明某件事情真实情况的专用书信。81、“熄火连三月,家书抵万金”古代书信通过邮驿传递。
数字签名需要严格验证发送发的身份信息!!!
数字证书包含:
公钥认证机构的数字签名(权威机构CA)
数字证书可以自己生成,也可以从权威机构购买,但是注意,自己生成的证书,只能自己认可,别人都不认可.

权威机构签名的证书:
以GitHub官网为例,Chrome浏览器打开网址,地址栏有一个小绿锁,点击,内容如下:
image
可以看到连接是安全的,点击证书可以看到详细信息
image
这是由权威机构认证的证书,但是是需要花钱的,一年至少得一两千,所以也有些公司用自己签名的证书,自己签名的证书不被信任,可能会提示用户有风险,比如原来的12306网站,现在大多数网站也都采用了CA签名数字证书进行签名,自己做签名的也不好找了!!!12306都改成CA认证的了。。。
生成私钥
openssl genrsa -out private.pem 1024
创建证书请求
openssl req -new -key private.pem -out rsacert.csr
生成证书并签名,有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
将 PEM 格式文件转换成 DER 格式
openssl x509 -outform der -in rsacert.crt -out rsacert.der
导出P12文件
openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
image
注意:
在iOS开发中,不能直接使用 PEM 格式的证书,因为其内部进行了Base64编码,应该使用的是DER的证书,是二进制格式的OpenSSL默认生成的都是PEM格式的证书
代码演示:
// p12 是私钥
// .der 是公钥
// 非对称加密,使用公钥加密,私钥解密
// 加载公钥
[[RSACryptor sharedRSACryptor] loadPublicKey:[[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil]];
// 对数据加密
NSData *data = [[RSACryptor sharedRSACryptor] encryptData:[@"hahaha" dataUsingEncoding:NSUTF8StringEncoding]];
// 对加密得到的密文进行base64编码打印
NSLog(@"%@", [data base64EncodedStringWithOptions:kNilOptions]);
// 输出结果:PflhCgTVNegcQXrb39RJOoxCRRIHuZ3LN0/hoxTDFBbC+8yKjp0m+/hxVUWBVsTo28WnNFCAFfrQ2of5SkqttD51a5eLb21R7bQSQRxg/gVZ5hePcE3vh7Slfcxm2qJM+J8hRWDP/MF4BiDLXI9ZqTpLCSS5mjJtmUBf2wNvI1Y=
// 私钥解密
// 加载私钥
[[RSACryptor sharedRSACryptor] loadPrivateKey:[[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil] password:@"123456"];
// 解密
NSData *decryDeta = [[RSACryptor sharedRSACryptor] decryptData:data];
NSLog(@"%@", [[NSString alloc] initWithData:decryDeta encoding:NSUTF8StringEncoding]);
// 输出:hahaha
写原创文章的另外一个好处是投稿,写完文章我们可以投稿到其他站长博客上去。如果您看好这个项目,欢迎您的咨询和加入,全程为您指导各种精准引流推广方法,视频引流,百度系,博客系最安全的对称加密,写软文,发圈,销售,让你做好达令家无忧。特斯拉率先在官方网站上发布博客,随后在twitter, facebook, google+, vimeo, instagram发布了相关视频内容,视频内容为一个人从上车到公司后,汽车全自动驾驶,全程完全不需要人控制,充分展示了特斯拉的黑科技,内容一经发布立刻引发巨大关注,全社交平台的营销策略使得特斯拉覆盖了短文案,长博客,图片,视频多种形式,丰富全面地展示了特斯拉全自动驾驶的使用场景。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-106374-2.html
就拿美国练练手
穿白毛衣太棒