EnzoFeng/iOS-RSA: iOS中使用RSA加密
iOS-RSA
iOS中使用RSA加密 RSA算法是一種非對稱加密算法,常被用于加密數據傳輸.如果配合上數字摘要算法, 也可以用于文件簽名. 本文將討論如何在iOS中使用RSA傳輸加密數據.
RSA基本原理
RSA使用"秘匙對"對數據進行加密解密.在加密解密數據前,需要先生成公鑰(public key)和私鑰(private key). 公鑰(public key): 用于加密數據. 用于公開, 一般存放在數據提供方, 例如iOS客戶端. 私鑰(private key): 用于解密數據. 必須保密, 私鑰泄露會造成安全問題. iOS中的Security.framework提供了對RSA算法的支持.這種方式需要對密匙對進行處理, 根據public key生成證書, 通過private key生成p12格式的密匙. 除了Secruty.framework, 也可以將openssl庫編譯到iOS工程中, 這可以提供更靈活的使用方式. 本文使用Security.framework的方式處理RSA.
RSA加密中需要用到兩個文件
1、含有公鑰信息的.der文件 2、含有私鑰信息的.p12文件 以下為生成方式(生成后導入工程即可,在終端輸入以openssl開頭的命令)
!/usr/bin/env bash
echo "Generating RSA key pair ..."
echo "1024 RSA key: private_key.pem"
openssl genrsa -out private_key.pem 1024
echo "create certification require file: rsaCertReq.csr"
openssl req -new -key private_key.pem -out rsaCertReq.csr
echo "create certification using x509: rsaCert.crt"
openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt
echo "create public_key.der For IOS"
openssl x509 -outform der -in rsaCert.crt -out public_key.der
echo "create private_key.p12 For IOS. Please remember your password. The password will be used in iOS."
openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt
echo "create rsa_public_key.pem For Java"
openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout
echo "create pkcs8_private_key.pem For Java"
openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt
echo "finished."
加密(使用到含有公鑰信息的.der文件)
RSAEncryptor *rsa = [[RSAEncryptor alloc] init]; NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"]; [rsa loadPublicKeyFromFile:publicKeyPath];
NSString *securityText = @"Hello RSA"; NSString *encryptedString = [rsa rsaEncryptString:securityText];
解密(使用到含有私鑰信息的.p12文件)
[rsa loadPrivateKeyFromFile:[[NSBundle mainBundle] pathForResource:@"private_key" ofType:@"p12"] password:@"123456"]; NSString *decryptedString = [rsa rsaDecryptString:encryptedString];