澳门威斯尼人平台登录前端密码加密的几种方式整理,iOS简单介绍RSA

时间: 2019-05-14阅读: 2302标签: 加密

病毒使用工具:

窃取自美国国家安全局的黑客工具EternalBlue(直译:“永恒之蓝”)

MD5加密是单向的,只能加密不能解密(破解除外)。标题可能会引起读者误解,已经改正,感谢Li_Cheng同学的提醒,另外笔者发现Li_Cheng同学有篇MD5加密更为详尽的文章,推荐阅读:iOS开发 关于MD5加密的相关使用

最近做的项目涉及到了登陆密码加密,整理几种加密的方式:

漏洞:

MS17-010漏洞
微软https://support.microsoft.com/zh-cn/help/4012598/title
已在3月14日做了修补,但貌似只针对win10

好难貌似是个越界漏洞
漏洞分析:http://bobao.360.cn/learning/detail/3738.html

加密的Demo,欢迎下载

  1. rsa加密方式

攻击流程

漏洞感染==>执行Dll Payload==>释放资源到mssecsvc.exe==>安装服务mssecsvc2.0==>释放敲诈者Dropper执行加密流程==>感染更多主机

mssecsvc.exe:之后它会创建mssecsvc2.0服务。该服务会使用与初次执行不同的入口点执行mssecsvc.exe文件。第二次执行会检查被感染电脑的IP地址,并尝试联接到相同子网内每个IP地址的TCP 445端口

Java端的加密解密,读者可以看这篇文章http://www.jianshu.com/p/98569e81cc0b

首先引入一下js文件,路径根据实际情况自行修改:

加密过程

澳门威斯尼人平台登录 1

t01e21dedf5d7d5ed91.png

整个加密过程采用RSA+AES的方式完成,其中RSA加密过程使用了微软的CryptAPI,AES代码静态编译到dll

程序执行==>使用CryptGenKey生成RSA2048 SesionKey==>导出SPUBKEY到文件0000000.pky,使用RPUBKEY加密SPIVKEY导出到文件00000000.eky==>遍历文件==>使用CryptGenRandom生成FLEKEY 128bit==>使用SPUBKEY加密FILEKEY获得ENOFLEKEY==>使用LEKEY初始化AES_OONTEXT==>清空内存中的FILEKEY==>使用AES_CONTEXT加密文件内容==>一次写入WABAORY!标记ENOFILEKEY加密文件内容

Crypto:加密过程:获取公钥-->随机生成对话对称密钥-->公钥传输,私钥获取-->通过对话密钥通信
CryptGenKey.aspx):生成随机加密会话密钥或公钥、私钥密钥对。四个参数:创建CSP的句柄,要生成密钥的算法的ALG_ID值,生成密钥的类型,复制新生成的键的句柄的地址
CryptGenRandom:该函数生成的数据是密码随机的。它比典型随机数生成器(如C编译器附带的数据)生成的数据更为随机。三个参数:CSP的处理,生成字节数,填充缓冲区辅助随机(可选)

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的数据加密的时候遇到了一些问题。起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密。RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据。(iOS端公钥加密私钥解密、java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不能私钥加密公钥解密,只能用于验签)。

script src="../pidcrypt.js"/scriptscript src="../pidcrypt_util.js"/scriptscript src="../asn1.js"/scriptscript src="../jsbn.js"/scriptscript src="../rng.js"/scriptscript src="../prng4.js/scriptscript src="../rsa.js"/script
密钥概述

RPUBKEY:rsa 2048(公钥) 硬编码与程序中
RPIVKEY:rsa 2048(私钥)
SPUBKEY:rsa 2048 会话密钥(公钥),由CryptGenKey随机生成
SPIVKEYrsa 2048 会话密钥(私钥),由RPUBKEY加密保存
FILEKEY:aes 128 由CryptGenRandom随机生成,一个文件一个
FILEKEY 由会话公钥SPUBKEY将FILEKEY加密存储在文件上

问题

然后初始化rsa:

解密过程:(个人理解,八九不离十)

提供RPIVKEY,解密SPIVKEY,解密FILEKEY,解密文件

问题1:iOS端公钥加密的数据用Java端私钥解密。

var pubKey = '{$pubKey}';var keyParams = certParser(pubKey);var key = pidCryptUtil.decodeBase64(keyParams.b64);var rsa = new pidCrypt.RSA();var asn = pidCrypt.ASN1.decode(pidCryptUtil.toByteArray(key));var tree = asn.toHexTree();rsa.setPublicKeyFromASN(tree);

特例

在加密过程中,程序会随机选取一部分文件使用内置的RSA公钥来进行加密,这里的目的是解密程序提供的免费解密部分文件功能。

iOS无论使用系统自带的sdk函数,用mac产生的或者使用java的jdk产生的公钥和私钥,进行加密解密自己都可以使用。不过ios加密,java解密,或者反过来就不能用了。要么是无法创建报告个-9809或-50的错误,要么解出来是乱码。ios系统函数种只有用公钥加密,私钥解密的方式。而公钥加密每次结果都不同。

使用方式:encryptBase64(value, rsa);value代表要加密的值,rsa是前面初始化好的rsa变量。

总结

这次勒索漏洞使用了双rsa加aes,双rsa很高效得提高了保密性,aes加密文件又能保证加密效率,骚的很。。

MAC上生成公钥、私钥的方法,及使用

  1. Md5加密方式

参考网站

http://bobao.360.cn/learning/detail/3853.html
http://www.chinablackhat.com/Article/201705/144767.html

1.打开终端,切换到自己想输出的文件夹下

引入文件:

2.输入指令:openssl(openssl是生成各种秘钥的工具,mac已经嵌入

script src="../pidcrypt.js"/scriptscript src="../md5.js"/script

3.输入指令:genrsa

使用方式:pidCrypt.MD5(value);

-out rsa_private_key.pem 1024(生成私钥,java端使用的)

  1. Sha256加密方式

4.输入指令:rsa

引入文件:

-in rsa_private_key.pem -out rsa_public_key.pem -pubout(生成公钥)

script src="../pidcrypt.js"/scriptscript src="../sha256.js"/script

5.输入指令:pkcs8

使用方式:pidCrypt.SHA256(value);总体而言,rsa加密会比其他两种方式复杂,需要注意的是,rsa在初始化时一定要先赋给它一个公钥。

-topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt(私钥转格式,在ios端使用私钥解密时用这个私钥)

原文来自:

注意:在MAC上生成三个.pem格式的文件,一个公钥,两个私钥,都可以在终端通过指令vim xxx.pem 打开,里面是字符串,第三步生成的私钥是java端用来解密数据的,第五步转换格式的私钥iOS端可以用来调试公钥、私钥解密(因为私钥不留在客户端)

详细步骤

问题2:服务器返回数据也要加密,老大打算用java私钥加密,ios用公钥解密(由于iOS做不到用私钥加密公钥解密,只能私钥加密公钥验签),所以这种方案也有问题。

通过看一些大牛的介绍,了解了iOS常用的加密方式

1 通过简单的URLENCODE + BASE64编码防止数据明文传输

2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验

3 对于重要数据,使用RSA进行数字签名,起到防篡改作

4 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密

原因:客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES)

所以此次加密,我们选择了第四种加密方式

加密方式

ios端进行DES加密、解密时非常方便

1、引入头文件#import"DES3Util.h"2、加密时调用类方法  +(NSString*) encryptUseDES:(NSString*)plainText key:(NSString*)key;3、解密时调用类方法  +(NSString*)decryptUseDES:(NSString*)cipherText key:(NSString*)key;

ios端进行RSA加密、解密时非常方便

1、引入头文件#import"RSAUtil.h"2、公钥加密时调用类方法:+ (NSString*)encryptString:(NSString*)str publicKey:(NSString*)pubKey;+ (NSData*)encryptData:(NSData*)data publicKey:(NSString*)pubKey;3、私钥解密时调用类方法 + (NSString*)decryptString:(NSString*)str privateKey:(NSString*)privKey;+ (NSData*)decryptData:(NSData*)data privateKey:(NSString*)privKey;

ios端进行MD5加密、解密时非常方便

1、引入头文件#import"MD5Util"2、加密时调用方法:- (NSString*)md5:(NSString*)str;

ios端进行AES加密、解密时非常方便

1、引入头文件#import"AES.h"2、加密时调用方法+ (NSString*)encrypt:(NSString*)message password:(NSString*)password;2、解密时调用的方法+ (NSString*)decrypt:(NSString*)base64EncodedString password:(NSString*)password;

有关RSA、MD5、AES加密的原理介绍

效果图

澳门威斯尼人平台登录 2

Encryption.gif

本文由澳门威斯尼人平台登录发布于Web前端,转载请注明出处:澳门威斯尼人平台登录前端密码加密的几种方式整理,iOS简单介绍RSA

相关阅读