加密的Demo,歡迎下載html
java端的加密解密,讀者能夠看我同事的這篇文章http://www.jianshu.com/p/98569e81cc0bjava
最近作了一個移動項目,是有服務器和客戶端類型的項目,客戶端是要登陸才行的,服務器也會返回數據,服務器是用Java開發的,客戶端要同時支持多平臺(Android、iOS),在處理iOS的數據加密的時候遇到了一些問題。起初採起的方案是DES加密,老大說DES加密是對稱的,網絡抓包加上反編譯可能會被破解,故採起RSA方式加密。RSA加密時須要公鑰和私鑰,客戶端保存公鑰加密數據,服務器保存私鑰解密數據。(iOS端公鑰加密私鑰解密、java端公鑰加密私鑰解密,java端私鑰加密公鑰解密都容易作到,iOS不能私鑰加密公鑰解密,只能用於驗籤)。ios
iOS不管使用系統自帶的sdk函數,用mac產生的或者使用java的jdk產生的公鑰和私鑰,進行加密解密本身均可以使用。不過ios加密,java解密,或者反過來就不能用了。要麼是沒法建立報告個-9809或-50的錯誤,要麼解出來是亂碼。ios系統函數種只有用公鑰加密,私鑰解密的方式。而公鑰加密每次結果都不一樣。git
openssl
(openssl是生成各類祕鑰的工具,mac已經嵌入genrsa -out rsa_private_key.pem 1024
(生成私鑰,java端使用的)rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
(生成公鑰)pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
(私鑰轉格式,在ios端使用私鑰解密時用這個私鑰)一、引入頭文件 #import "DES3Util.h" 二、加密時調用類方法 +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key; 三、解密時調用類方法 +(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;
一、引入頭文件 #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;
一、引入頭文件 #import "MD5Util" 二、加密時調用方法:- (NSString *)md5:(NSString *)str;
一、引入頭文件 #import "AES.h" 二、加密時調用方法 + (NSString *)encrypt:(NSString *)message password:(NSString *)password; 二、解密時調用的方法 + (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;
有關RSA、MD五、AES加密的原理介紹github