iOS,一行代碼進行RSA、DES 、AES、MD5加密、解密

問題
問題1:iOS端公鑰加密的數據用Java端私鑰解密。iOS不管使用系統自帶的sdk函數,用mac產生的或者使用java的jdk產生的公鑰和私鑰,進行加密解密本身均可以使用。不過ios加密,java解密,或者反過來就不能用了。要麼是沒法建立報告個-9809或-50的錯誤,要麼解出來是亂碼。ios系統函數種只有用公鑰加密,私鑰解密的方式。而公鑰加密每次結果都不一樣。

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

  • 1.打開終端,切換到本身想輸出的文件夾下
  • 2.輸入指令: openssl(openssl是生成各類祕鑰的工具,mac已經嵌入
  • 3.輸入指令: genrsa -out rsa_private_key.pem 1024  (生成私鑰,java端使用的)
  • 4.輸入指令: rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout  (生成公鑰)
  • 5.輸入指令: pkcs8 -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經常使用的加密方式
ios

  • 1 經過簡單的URLENCODE + BASE64編碼防止數據明文傳輸
  • 2 對普通請求、返回數據,生成MD5校驗(MD5中加入動態密鑰),進行數據完整性(簡單防篡改,安全性較低,優勢:快速)校驗
  • 3 對於重要數據,使用RSA進行數字簽名,起到防篡改做
  • 4 對於比較敏感的數據,如用戶信息(登錄、註冊等),客戶端發送使用RSA加密,服務器返回使用DES(AES)加密
    緣由:客戶端發送之因此使用RSA加密,是由於RSA解密須要知道服務器私鑰,而服務器私鑰通常盜取難度較大;若是使用DES的話,能夠經過破解客戶端獲取密鑰,安全性較低。而服務器返回之因此使用DES,是由於無論使用DES仍是RSA,密鑰(或私鑰)都存儲在客戶端,都存在被破解的風險,所以,須要採用動態密鑰,而RSA的密鑰生成比較複雜,不太適合動態密鑰,而且RSA速度相對較慢,因此選用DES)
    因此這次加密,咱們選擇了第四種加密方式



加密方式
ios端進行DES加密、解密時很是方便vim

一、引入頭文件 #import "DES3Util.h"
二、加密時調用類方法  +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
三、解密時調用類方法  +(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;

ios端進行RSA加密、解密時很是方便安全

一、引入頭文件 #import "RSAUtil.h"
二、公鑰加密時調用類方法:
+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;
三、私鑰解密時調用類方法 
+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;
ios端進行MD5加密、解密時很是方便
一、引入頭文件 #import "MD5Util"
二、加密時調用方法:- (NSString *)md5:(NSString *)str;
ios端進行AES加密、解密時很是方便
一、引入頭文件 #import "AES.h"
二、加密時調用方法
+ (NSString *)encrypt:(NSString *)message password:(NSString *)password;
二、解密時調用的方法
+ (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;
相關文章
相關標籤/搜索