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];

項目地址: https://github.com/EnzoFeng/iOS-RSA

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!