适用于 iOS 的简单 RSA 加密和解密。
这些类 不需要 OpenSSL 就可以在 iOS 上构建,您只需要 Security.framework
。
但是,需要 OpenSSL 生成密钥对,通常您希望在自己的桌面机器上完成。
请参见以下内容。
对于加密,您可以将公钥({name}.crt
)添加到您的应用程序包中,并加载它。
对于解密,您可以 添加 您的 p12({name}.p12
)到您的应用程序包中并加载它。
但是,您可能不希望将您的 .p12 添加到应用程序包中,因为它很容易被提取。
相反,您应该以某种方式将私钥数据加载到您的应用程序中,并从中创建一个 NSData
表示。
NSString *string = @"This is a string to encrypt. No longer than 245 bytes!";
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSString *private = <# Base64 String of your private p12 data #>;
NSData *privateKey = [[NSData alloc] initWithBase64EncodedString:private options:0];
PPRSA *rsa = [PPRSA new];
NSError *error = nil;
if ([rsa loadPublicKeyFromBundledCertificate:@"public" error:&error]) {
if ([rsa loadPrivateKeyFromP12Data:privateKey password:@"t4co9x" error:&error]) {
NSData *encrypted = [rsa encryptData:data error:&error];
if (encrypted) {
NSData *decrypted = [rsa decryptData:encrypted error:&error];
NSString *final = [[NSString alloc] initWithData:decrypted encoding:NSUTF8StringEncoding];
NSLog(@"--> %@", final);
}
}
}
生成一个新的密钥对(到 public.crt
和 private.pem
)。
您需要提供一个密码。
openssl req -x509 -days 3652 -out public.crt -outform DER -new -newkey rsa:2048 -keyout private.pem
创建一个签名请求。
您将被要求提供国家、公司等信息;填写适用于您的任何内容。
openssl req -new -key private.pem -out signing-request.csr
创建自签名证书,例如此示例中有效期为 10 年。
您将需要输入私钥的密码。
openssl x509 -req -days 3652 -in signing-request.csr -signkey private.pem -out certificate.crt
将私钥和证书导出到一个 p12 文件(private.p12
)中。
您将再次被要求输入私钥密码,并提示您为 p12 创建一个新密码。
openssl pkcs12 -export -out private.p12 -inkey private.pem -in certificate.crt
这项工作是公共领域的。
代码片段来自各种地方,特别是 StackOverflow 和 Chris Luke 的博客。