2016-11-15 87 views
-6

我有模生成從模公鑰和指數

MjAxNzY5NTQ0ODc1ODUxMzcyOTQ3ODM5MjI1NzQ2MzQ1MTUzNjQxMjMxODE4NTE1NzQwODUwODI0NjYxMTA4NTA0MTc2ODU4MDUzMzE2ODIwMzI2NDcyMDI2NTkyMjc0MjgwMjE1NDg3MDEwNzU2NzA3OTU4NzQ2MTYxNzI5NDc5OTUzMzAwOTM0OTA4MTc4NDI2MTM5NDc3MDMxNzkxMzg0MDAyOTE5NjMyMTAyMDA5MjEwNDQ4MzU1MzYwOTY0ODkxODAxNjY5MTM4MTQ4NjU0Njg3OTA0NjUxNTUxOTIzMDU4MjQ0Njg2MTQ5NzkzMTQwNzYzODM2MjY1MjA2NjcyMjY4MjQzMDE2MjA4MTQ3NjAwMzIwNzI2MTIzNzQ4MjA5MzIwODIwODc2ODMxNzgzNzA4NTYyMzg5MzI2OTc2NTM2NjgyNzY0MDgwMTM3ODY1MjIyNjc5OTQ3NDMwMzIwMDE0NTAzMDE2ODQyMTQyNjgxNjMwNTA4OTQ1MDU3OTgzMDEzNDMwNDYxMDY5OTA3NjI0MzU3Mjc5MjU0MTQ5NDUzMzMyODUxNjkyOTc3OTIxMTUzNjIzOTg1Nzk0NzkyMzY2NDY2NDQwNTczMTQxMjc2ODAwOTU1MTU4NTQxOTk4ODM1MDIyMjk2NTE1ODU3ODI5Mjk2NzMzNjM 1MjE3Mjk4ODYxNDYwODg3NjY4NDU4MjAzMzc3NjM5ODc2MTMyMTQ1MjczODAzOTAzMzU0ODA5MTYzNjEwNDE3ODgwNTAyNzA1NTM2NzMwNzQ1OTc1MzgwMjM2NjI5MjY3NjkzOTU2NTcyMDE =

和指數

請幫我生成使用係數和指數使用客觀-C公鑰。

+0

的BIGNUM結構和加密我認爲這是一個重複http://stackoverflow.com/q/29669858/3484009 – Sunder

+0

您可以在我的答案評論中回答我的問題,或者告訴您是否找到另一個解決方案? – Sunder

+3

對問題進行獎勵並不授予您發佈質量很低的「爲我做」類型問題的權利。請編輯你的問題。 –

回答

1

正如this answer寫zaph,下面的代碼應該做你想要什麼:

NSData* bytesFromHexString(NSString * aString) { 
    NSString *theString = [[aString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] componentsJoinedByString:nil]; 

    NSMutableData* data = [NSMutableData data]; 
    int idx; 
    for (idx = 0; idx+2 <= theString.length; idx+=2) { 
     NSRange range = NSMakeRange(idx, 2); 
     NSString* hexStr = [theString substringWithRange:range]; 
     NSScanner* scanner = [NSScanner scannerWithString:hexStr]; 
     unsigned int intValue; 
     if ([scanner scanHexInt:&intValue]) 
      [data appendBytes:&intValue length:1]; 
    } 
    return data; 
} 

NSString *modulusString = @"..."; 
NSString *exponentString = @"65537"; 

NSData *pubKeyModData = bytesFromHexString(modulusString); 
NSData *pubKeyExpData = bytesFromHexString(exponentString); 
NSArray *keyArray = @[pubKeyModData, pubKeyExpData]; 

//Given that you are using SCZ-BasicEncodingRules-iOS: 
NSData *berData = [keyArray berData]; 
NSLog(@"berData:\n%@", berData); 

NSString *berBase64 = [berData base64EncodedStringWithOptions:0]; 
NSString *preamble = @"-----BEGIN CERTIFICATE REQUEST-----"; 
NSString *postamble = @"-----END CERTIFICATE REQUEST-----"; 
NSString *pem = [NSString stringWithFormat:@"%@\n%@\n%@", preamble, berBase64, postamble]; 
NSLog(@"pem:\n%@", pem); 
+0

我試過這個,但生成的公鑰沒有加密數據。 – Manjunath

+0

它實際上是生成一個pem文件的內容。你能證明你是如何加密數據的? – Sunder

+0

iOS不提供生成公鑰的機制,因爲我們從java或android中獲取該公鑰是非常具體的。通過添加一個API並將mod和exp發送到服務器並將公鑰返回來解決問題。感謝幫助 – Manjunath

0

要做到這一點請確保您已經OpenSSL庫鏈接(這裏http://code.google.com/p/ios-static-libraries/指令)

一旦鏈接你將可以訪問多個BIGNUM轉換器。我把模數爲十六進制使用BN_hex2bn方法節省了十六進制字符串爲「指數」

然後創建一個使用RSA_public_encrypt

RSA *rsa = NULL; 
rsa->n = BN_new(); 
BN_copy(rsa->n,modulus); 
rsa->e = BN_new(); 
BN_copy(rsa->e,exponent);  
rsa->iqmp=NULL; 
rsa->d=NULL; 
rsa->p=NULL; 
rsa->q=NULL;