打开游戏提示rsa decoding error:Invalid block errortype 重启。重装

2008年9月 C/C++大版内专家分月排行榜第二2008年4月 C/C++大版内专家分月排行榜第二2008年2月 C/C++大版内专家分月排行榜第二2007年7月 C/C++大版内专家分月排行榜第二
2011年10月 C/C++大版内专家分月排行榜第三2009年1月 C/C++大版内专家分月排行榜第三2008年10月 C/C++大版内专家分月排行榜第三2008年5月 C/C++大版内专家分月排行榜第三2007年6月 C/C++大版内专家分月排行榜第三2007年5月 C/C++大版内专家分月排行榜第三
2008年9月 C/C++大版内专家分月排行榜第二2008年4月 C/C++大版内专家分月排行榜第二2008年2月 C/C++大版内专家分月排行榜第二2007年7月 C/C++大版内专家分月排行榜第二
2011年10月 C/C++大版内专家分月排行榜第三2009年1月 C/C++大版内专家分月排行榜第三2008年10月 C/C++大版内专家分月排行榜第三2008年5月 C/C++大版内专家分月排行榜第三2007年6月 C/C++大版内专家分月排行榜第三2007年5月 C/C++大版内专家分月排行榜第三
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2005年1月 C/C++大版内专家分月排行榜第二
2008年9月 C/C++大版内专家分月排行榜第二2008年4月 C/C++大版内专家分月排行榜第二2008年2月 C/C++大版内专家分月排行榜第二2007年7月 C/C++大版内专家分月排行榜第二
2011年10月 C/C++大版内专家分月排行榜第三2009年1月 C/C++大版内专家分月排行榜第三2008年10月 C/C++大版内专家分月排行榜第三2008年5月 C/C++大版内专家分月排行榜第三2007年6月 C/C++大版内专家分月排行榜第三2007年5月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。iOS学习之RSA加密解密(附java代码和iOS代码)_IOS_第七城市
iOS学习之RSA加密解密(附java代码和iOS代码)
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。它是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法。& & &它的原理较为简单,假设有消息发送方A和消息接收方B,通过下面的几个步骤,就可以完成消息的加密传递:消息发送方A在本地构建密钥对,公钥和私钥;消息发送方A将产生的公钥发送给消息接收方B;B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。& & & &由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。& & & &当然,这种方式可能存在数据传递被模拟的隐患,但可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于解密。首先需要先生成这些文件,然后再将文件导入工程使用。一、使用openssl生成所需秘钥文件首先打开终端,按下面这些步骤依次来做:1. 生成模长为1024bit的私钥文件private_key.pemopenssl genrsa -out private_key.pem 10242. 生成证书请求文件rsaCertReq.csropenssl req -new -key private_key.pem -out rsaCerReq.csr注意:这一步会提示输入国家、省份、mail等信息,可以根据实际情况填写,或者全部不用填写,直接全部敲回车.3. 生成证书rsaCert.crt,并设置有效时间为1年openssl x509 -req -days 3650 -in rsaCerReq.csr -signkey private_key.pem -out rsaCert4. 生成供iOS使用的公钥文件public_key.deropenssl x509 -outform der -in rsaCert.crt -out public_key.der5. 生成供iOS使用的私钥文件private_key.p12openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt注意:这一步会提示给私钥文件设置密码,直接输入想要设置密码即可,然后敲回车,然后再验证刚才设置的密码,再次输入密码,然后敲回车,完毕!在解密时,private_key.p12文件需要和这里设置的密码配合使用,因此需要牢记此密码.6. 生成供Java使用的公钥rsa_public_key.pemopenssl rsa -in private_key.pem -out rsa_public_key.pem -pubout7. 生成供Java使用的私钥pkcs8_private_key.pemopenssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt全部执行成功后,会生成如下文件,其中public_key.der和private_key.p12就是iOS需要用到的文件,如下图:二、将文件导入工程使用1.新建工程, 并导入Security.framework框架, 如下图:2.导入秘钥文件导入.der和.p12格式的秘钥文件, 如下图:3.新建用于加密、解密的类RSAEncryptor, 并实现相关方法新建RSAEncryptor类, 如下图:RSAEncryptor.h代码如下:#import &Foundation/Foundation.h&@interface RSAEncryptor : NSObject/** *
加密方法 * *
@param str
需要加密的字符串 *
@param path
'.der'格式的公钥文件路径 */+ (NSString *)encryptString:(NSString *)str publicKeyWithContentsOfFile:(NSString *)/** *
解密方法 * *
@param str
需要解密的字符串 *
@param path
'.p12'格式的私钥文件路径 *
@param password
私钥文件密码 */+ (NSString *)decryptString:(NSString *)str privateKeyWithContentsOfFile:(NSString *)path password:(NSString *)/** *
加密方法 * *
@param str
需要加密的字符串 *
@param pubKey 公钥字符串 */+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubK/** *
解密方法 * *
@param str
需要解密的字符串 *
@param privKey 私钥字符串 */+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privK@endRSAEncryptor.m代码如下:#import &RSAEncryptor.h&#import &Security/Security.h&@implementation RSAEncryptorstatic NSString *base64_encode_data(NSData *data){
data = [data base64EncodedDataWithOptions:0];
NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}static NSData *base64_decode(NSString *str){
NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];}#pragma mark - 使用'.der'公钥文件加密//加密+ (NSString *)encryptString:(NSString *)str publicKeyWithContentsOfFile:(NSString *)path{
if (!str || !path)
return [self encryptString:str publicKeyRef:[self getPublicKeyRefWithContentsOfFile:path]];}//获取公钥+ (SecKeyRef)getPublicKeyRefWithContentsOfFile:(NSString *)filePath{
NSData *certData = [NSData dataWithContentsOfFile:filePath];
if (!certData) {
SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)certData);
SecKeyRef key = NULL;
SecTrustRef trust = NULL;
SecPolicyRef policy = NULL;
if (cert != NULL) {
policy = SecPolicyCreateBasicX509();
if (policy) {
if (SecTrustCreateWithCertificates((CFTypeRef)cert, policy, &trust) == noErr) {
SecTrustResultT
if (SecTrustEvaluate(trust, &result) == noErr) {
key = SecTrustCopyPublicKey(trust);
if (policy) CFRelease(policy);
if (trust) CFRelease(trust);
if (cert) CFRelease(cert);}+ (NSString *)encryptString:(NSString *)str publicKeyRef:(SecKeyRef)publicKeyRef{
if(![str dataUsingEncoding:NSUTF8StringEncoding]){
if(!publicKeyRef){
NSData *data = [self encryptData:[str dataUsingEncoding:NSUTF8StringEncoding] withKeyRef:publicKeyRef];
NSString *ret = base64_encode_data(data);}#pragma mark - 使用'.12'私钥文件解密//解密+ (NSString *)decryptString:(NSString *)str privateKeyWithContentsOfFile:(NSString *)path password:(NSString *)password{
if (!str || !path)
if (!password) password = @&&;
return [self decryptString:str privateKeyRef:[self getPrivateKeyRefWithContentsOfFile:path password:password]];}//获取私钥+ (SecKeyRef)getPrivateKeyRefWithContentsOfFile:(NSString *)filePath password:(NSString*)password{
NSData *p12Data = [NSData dataWithContentsOfFile:filePath];
if (!p12Data) {
SecKeyRef privateKeyRef = NULL;
NSMutableDictionary * options = [[NSMutableDictionary alloc] init];
[options setObject: password forKey:(__bridge id)kSecImportExportPassphrase];
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
OSStatus securityError = SecPKCS12Import((__bridge CFDataRef) p12Data, (__bridge CFDictionaryRef)options, &items);
if (securityError == noErr && CFArrayGetCount(items) & 0) {
CFDictionaryRef identityDict = CFArrayGetValueAtIndex(items, 0);
SecIdentityRef identityApp = (SecIdentityRef)CFDictionaryGetValue(identityDict, kSecImportItemIdentity);
securityError = SecIdentityCopyPrivateKey(identityApp, &privateKeyRef);
if (securityError != noErr) {
privateKeyRef = NULL;
CFRelease(items);
return privateKeyR}+ (NSString *)decryptString:(NSString *)str privateKeyRef:(SecKeyRef)privKeyRef{
NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
if (!privKeyRef) {
data = [self decryptData:data withKeyRef:privKeyRef];
NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}#pragma mark - 使用公钥字符串加密/* START: Encryption with RSA public key *///使用公钥字符串加密+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey{
NSData *data = [self encryptData:[str dataUsingEncoding:NSUTF8StringEncoding] publicKey:pubKey];
NSString *ret = base64_encode_data(data);}+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey{
if(!data || !pubKey){
SecKeyRef keyRef = [self addPublicKey:pubKey];
if(!keyRef){
return [self encryptData:data withKeyRef:keyRef];}+ (SecKeyRef)addPublicKey:(NSString *)key{
NSRange spos = [key rangeOfString:@&-----BEGIN PUBLIC KEY-----&];
NSRange epos = [key rangeOfString:@&-----END PUBLIC KEY-----&];
if(spos.location != NSNotFound && epos.location != NSNotFound){
NSUInteger s = spos.location + spos.
NSUInteger e = epos.
NSRange range = NSMakeRange(s, e-s);
key = [key substringWithRange:range];
key = [key stringByReplacingOccurrencesOfString:@&/r& withString:@&&];
key = [key stringByReplacingOccurrencesOfString:@&/n& withString:@&&];
key = [key stringByReplacingOccurrencesOfString:@&/t& withString:@&&];
key = [key stringByReplacingOccurrencesOfString:@& &
withString:@&&];
// This will be base64 encoded, decode it.
NSData *data = base64_decode(key);
data = [self stripPublicKeyHeader:data];
if(!data){
//a tag to read/write keychain storage
NSString *tag = @&RSAUtil_PubKey&;
NSData *d_tag = [NSData dataWithBytes:[tag UTF8String] length:[tag length]];
// Delete any old lingering key with the same tag
NSMutableDictionary *publicKey = [[NSMutableDictionary alloc] init];
[publicKey setObject:(__bridge id) kSecClassKey forKey:(__bridge id)kSecClass];
[publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[publicKey setObject:d_tag forKey:(__bridge id)kSecAttrApplicationTag];
SecItemDelete((__bridge CFDictionaryRef)publicKey);
// Add persistent version of the key to system keychain
[publicKey setObject:data forKey:(__bridge id)kSecValueData];
[publicKey setObject:(__bridge id) kSecAttrKeyClassPublic forKey:(__bridge id)
kSecAttrKeyClass];
[publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)
kSecReturnPersistentRef];
CFTypeRef persistKey =
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)publicKey, &persistKey);
if (persistKey != nil){
CFRelease(persistKey);
if ((status != noErr) && (status != errSecDuplicateItem)) {
[publicKey removeObjectForKey:(__bridge id)kSecValueData];
[publicKey removeObjectForKey:(__bridge id)kSecReturnPersistentRef];
[publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];
[publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
// Now fetch the SecKeyRef version of the key
SecKeyRef keyRef =
status = SecItemCopyMatching((__bridge CFDictionaryRef)publicKey, (CFTypeRef *)&keyRef);
if(status != noErr){
return keyR}+ (NSData *)stripPublicKeyHeader:(NSData *)d_key{
// Skip ASN.1 public key header
if (d_key == nil) return(nil);
unsigned long len = [d_key length];
if (!len) return(nil);
unsigned char *c_key = (unsigned char *)[d_key bytes];
unsigned int
if (c_key[idx++] != 0x30) return(nil);
if (c_key[idx] & 0x80) idx += c_key[idx] - 0x80 + 1;
else idx++;
// PKCS #1 rsaEncryption szOID_RSA_RSA
static unsigned char seqiod[] =
0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
0x01, 0x05, 0x00 };
if (memcmp(&c_key[idx], seqiod, 15)) return(nil);
idx += 15;
if (c_key[idx++] != 0x03) return(nil);
if (c_key[idx] & 0x80) idx += c_key[idx] - 0x80 + 1;
else idx++;
if (c_key[idx++] != '/0') return(nil);
// Now make a new NSData from this buffer
return ([NSData dataWithBytes:&c_key[idx] length:len - idx]);}+ (NSData *)encryptData:(NSData *)data withKeyRef:(SecKeyRef) keyRef{
const uint8_t *srcbuf = (const uint8_t *)[data bytes];
size_t srclen = (size_t)data.
size_t block_size = SecKeyGetBlockSize(keyRef) * sizeof(uint8_t);
void *outbuf = malloc(block_size);
size_t src_block_size = block_size - 11;
NSMutableData *ret = [[NSMutableData alloc] init];
for(int idx=0; idx& idx+=src_block_size){
//NSLog(@&%d/%d block_size: %d&, idx, (int)srclen, (int)block_size);
size_t data_len = srclen -
if(data_len & src_block_size){
data_len = src_block_
size_t outlen = block_
OSStatus status = noE
status = SecKeyEncrypt(keyRef,
kSecPaddingPKCS1,
srcbuf + idx,
if (status != 0) {
NSLog(@&SecKeyEncrypt fail. Error Code: %d&, status);
[ret appendBytes:outbuf length:outlen];
free(outbuf);
CFRelease(keyRef);}/* END: Encryption with RSA public key */#pragma mark - 使用私钥字符串解密/* START: Decryption with RSA private key *///使用私钥字符串解密+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey{
NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
data = [self decryptData:data privateKey:privKey];
NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey{
if(!data || !privKey){
SecKeyRef keyRef = [self addPrivateKey:privKey];
if(!keyRef){
return [self decryptData:data withKeyRef:keyRef];}+ (SecKeyRef)addPrivateKey:(NSString *)key{
NSRange spos = [key rangeOfString:@&-----BEGIN RSA PRIVATE KEY-----&];
NSRange epos = [key rangeOfString:@&-----END RSA PRIVATE KEY-----&];
if(spos.location != NSNotFound && epos.location != NSNotFound){
NSUInteger s = spos.location + spos.
NSUInteger e = epos.
NSRange range = NSMakeRange(s, e-s);
key = [key substringWithRange:range];
key = [key stringByReplacingOccurrencesOfString:@&/r& withString:@&&];
key = [key stringByReplacingOccurrencesOfString:@&/n& withString:@&&];
key = [key stringByReplacingOccurrencesOfString:@&/t& withString:@&&];
key = [key stringByReplacingOccurrencesOfString:@& &
withString:@&&];
// This will be base64 encoded, decode it.
NSData *data = base64_decode(key);
data = [self stripPrivateKeyHeader:data];
if(!data){
//a tag to read/write keychain storage
NSString *tag = @&RSAUtil_PrivKey&;
NSData *d_tag = [NSData dataWithBytes:[tag UTF8String] length:[tag length]];
// Delete any old lingering key with the same tag
NSMutableDictionary *privateKey = [[NSMutableDictionary alloc] init];
[privateKey setObject:(__bridge id) kSecClassKey forKey:(__bridge id)kSecClass];
[privateKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[privateKey setObject:d_tag forKey:(__bridge id)kSecAttrApplicationTag];
SecItemDelete((__bridge CFDictionaryRef)privateKey);
// Add persistent version of the key to system keychain
[privateKey setObject:data forKey:(__bridge id)kSecValueData];
[privateKey setObject:(__bridge id) kSecAttrKeyClassPrivate forKey:(__bridge id)
kSecAttrKeyClass];
[privateKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)
kSecReturnPersistentRef];
CFTypeRef persistKey =
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)privateKey, &persistKey);
if (persistKey != nil){
CFRelease(persistKey);
if ((status != noErr) && (status != errSecDuplicateItem)) {
[privateKey removeObjectForKey:(__bridge id)kSecValueData];
[privateKey removeObjectForKey:(__bridge id)kSecReturnPersistentRef];
[privateKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];
[privateKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
// Now fetch the SecKeyRef version of the key
SecKeyRef keyRef =
status = SecItemCopyMatching((__bridge CFDictionaryRef)privateKey, (CFTypeRef *)&keyRef);
if(status != noErr){
return keyR}+ (NSData *)stripPrivateKeyHeader:(NSData *)d_key{
// Skip ASN.1 private key header
if (d_key == nil) return(nil);
unsigned long len = [d_key length];
if (!len) return(nil);
unsigned char *c_key = (unsigned char *)[d_key bytes];
unsigned int
= 22; //magic byte at offset 22
if (0x04 != c_key[idx++])
//calculate length of the key
unsigned int c_len = c_key[idx++];
int det = c_len & 0x80;
if (!det) {
c_len = c_len & 0x7f;
int byteCount = c_len & 0x7f;
if (byteCount + idx & len) {
//rsa length field longer than buffer
unsigned int accum = 0;
unsigned char *ptr = &c_key[idx];
idx += byteC
while (byteCount) {
accum = (accum && 8) + *
byteCount--;
// Now make a new NSData from this buffer
return [d_key subdataWithRange:NSMakeRange(idx, c_len)];}+ (NSData *)decryptData:(NSData *)data withKeyRef:(SecKeyRef) keyRef{
const uint8_t *srcbuf = (const uint8_t *)[data bytes];
size_t srclen = (size_t)data.
size_t block_size = SecKeyGetBlockSize(keyRef) * sizeof(uint8_t);
UInt8 *outbuf = malloc(block_size);
size_t src_block_size = block_
NSMutableData *ret = [[NSMutableData alloc] init];
for(int idx=0; idx& idx+=src_block_size){
//NSLog(@&%d/%d block_size: %d&, idx, (int)srclen, (int)block_size);
size_t data_len = srclen -
if(data_len & src_block_size){
data_len = src_block_
size_t outlen = block_
OSStatus status = noE
status = SecKeyDecrypt(keyRef,
kSecPaddingNone,
srcbuf + idx,
if (status != 0) {
NSLog(@&SecKeyEncrypt fail. Error Code: %d&, status);
//the actual decrypted data is in the middle, locate it!
int idxFirstZero = -1;
int idxNextZero = (int)
for ( int i = 0; i & i++ ) {
if ( outbuf[i] == 0 ) {
if ( idxFirstZero & 0 ) {
idxFirstZero =
idxNextZero =
[ret appendBytes:&outbuf[idxFirstZero+1] length:idxNextZero-idxFirstZero-1];
free(outbuf);
CFRelease(keyRef);}/* END: Decryption with RSA private key 4.测试加密解密(1)使用.der和.p12#import &ViewController.h&#import &RSAEncryptor.h&@interface ViewController ()@ ViewController- (void)viewDidLoad {
[super viewDidLoad];
//原始数据
NSString *originalString = @&这是一段将要使用'.der'文件加密的字符串!&;
//使用.der和.p12中的公钥私钥加密解密
NSString *public_key_path = [[NSBundle mainBundle] pathForResource:@&public_key.der& ofType:nil];
NSString *private_key_path = [[NSBundle mainBundle] pathForResource:@&private_key.p12& ofType:nil];
NSString *encryptStr = [RSAEncryptor encryptString:originalString publicKeyWithContentsOfFile:public_key_path];
NSLog(@&加密前:%@&, originalString);
NSLog(@&加密后:%@&, encryptStr);
NSLog(@&解密后:%@&, [RSAEncryptor decryptString:encryptStr privateKeyWithContentsOfFile:private_key_path password:@&123456&]);}- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be (2)使用字符串公钥私钥#import &ViewController.h&#import &RSAEncryptor.h&@interface ViewController ()@ ViewController- (void)viewDidLoad {
[super viewDidLoad];
//原始数据
NSString *originalString = @&这是一段将要使用'秘钥字符串'进行加密的字符串!&;
//使用字符串格式的公钥私钥加密解密
NSString *encryptStr = [RSAEncryptor encryptString:originalString publicKey:@&MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTbZ6cNH9PgdF60aQKveLz3FTalyzHQwbp601y77SzmGHX3F5NoVUZbdK7UMdoCLK4FBziTewYD9DWvAErXZo9BFuI96bAop8wfl1VkZyyHTcznxNJFGSQd/B70/ExMgMBpEwkAAdyUqIjIdVGh1FQK/4acwS39YXwbS+IlHsPSQIDAQAB&];
NSLog(@&加密前:%@&, originalString);
NSLog(@&加密后:%@&, encryptStr);
NSLog(@&解密后:%@&, [RSAEncryptor decryptString:encryptStr privateKey:@&MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANNtnpw0f0+B0XrRpAq94vPcVNqXLMdDBunrTXLvtLOYYdfcXk2hVRlt0rtQx2gIsrgUHOJN7BgP0Na8AStdmj0EW4j3psCinzB+XVWRnLIdNzOfE0kUZJB38HvT8TEyAwGkTCQAB3JSoiMh1UaHUVAr/hpzBLf1hfBtL4iUew9JAgMBAAECgYA1tGeQmAkqofga8XtwuxEWDoaDS9k0+EKeUoXGxzqoT/GyiihuIafjILFhoUA1ndf/yCQaG973sbTDhtfpMwqFNQq13+JAownslTjWgr7Hwf7qplYW92R7CU0v7wFfjqm1t/2FKU9JkHfaHfb7qqESMIbO/VMjER9o4tEx58uXDQJBAO0O4lnWDVjr1gN02cqvxPOtTY6DgFbQDeaAZF8obb6XqvCqGW/AVms3Bh8nVlUwdQ2K/xte8tHxjW9FtBQTLd8CQQDkUncO35gAqUF9Bhsdzrs7nO1J3VjLrM0ITrepqjqtVEvdXZc+1/UrkWVaIigWAXjQCVfmQzScdbznhYXPz5fXAkEAgB3KMRkhL4yNpmKRjhw+ih+ASeRCCSj6Sjfbhx4XaakYZmbXxnChg+JB+bZNz06YBFC5nLZM7y/n61o1f5/56wJBALw+ZVzE6ly5L3x0HcFgau7MiJphFjgUdAtd/H9xfgE4odMRPUD3q9Me9LlMYK6MiKpfm4c2+3dzcCQQC8y37NPgpNEkd9smMwPpSEjPW41aMlfcKvP4Da3z7G5bGlmuICrva9YDAiaAyDGGCK8LxC8K6HpKrFgYrXkRtt&]);}- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be 那么秘钥字符串从哪里来? 可以来这里:http://web.chacuo.net/netrsakeypair, 这是一个在线生成RSA秘钥的网站补充:此处需要打开iOS和Java资源下载:http://download.csdn.net/detail/fivenineminutes/9687704,http://download.csdn.net/detail/fivenineminutes/9687698
最新教程周点击榜
微信扫一扫}

我要回帖

更多关于 rsa operation error 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信