日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS RSA加密

發布時間:2024/6/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS RSA加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS RSA加密

?最近手上一個項目,之前登陸注冊修改密碼都是明文傳送的,現在要改成一種安全的方式,后臺選擇了RSA加密,無奈啊,iOS端RSA的資料少,而且有不少都運行不成功,以下是我使用的加密成功后,傳輸到后端能正常解密出來的一個。

?

?使用mudulus和exponent進行RSA加密:

NSString *modulus = @"ALGDczaITDZDerFxXcrqipyFyYd21PwGuI4UtHvP2l9YlK40+JN4v+YWcs6rXWhmfK46hSShyvZirDJAq+d9GFLMAeKJ/ZmJBpBdt6bNH1F29kSk8CMKRLHwBZbc7iRC6bJez4bdiT0Dog/7F/EN/hVLm25dn0Dqf1HEk15ldMpN";NSString *exponent = @"AQAB";NSString *ncrryptStr = [RSAEncryptTool RSAEncryptString:@"FranZhou" modulus:modulus exponent:exponent];

  

要正常使用此加密方式,需要使用cocoapods導入下述庫

#RSA加密pod 'OpenSSL-Universal'pod 'GTMBase64', '~> 1.0.0'

網上有些資料是導入?pod 'OpenSSL',我在pod install的時候無法導入成功

  

?

?RSAEncryptTool

#import <Foundation/Foundation.h>@interface RSAEncryptTool : NSObject+ (NSString *)RSAEncryptString:(NSString *)data modulus:(NSString *)modulus exponent:(NSString *)exponent;@end//========================================================#import "RSAEncryptTool.h"#include <openssl/opensslv.h>#include <openssl/rsa.h>#include <openssl/evp.h>#include <openssl/bn.h>#import "GTMBase64.h"@implementation RSAEncryptTool+ (NSString *)RSAEncryptString:(NSString *)data modulus:(NSString *)modulus exponent:(NSString *)exponent {//一般情況這兩個字符是被base64加密過的// NSString *modulus = @"keAcC2TrYsqoYn1gyMwbX0VxzOF7iAdMVqGE0Xt/i/VHo1L7hwlRerr5xiSedjJEm2OxVG+FPn4ol1jw/adt8t2fpN7CAyTHrokqS+LcYbQPslH0pOy9ty0CctWCJhk1HD3T1ByP4K+9dpHmbbb13ixavbC318gElz8UoSeWEz8=";//通過這個可以得到其中的N//NSString *exponent = @"AQAB";//通過這個其中的e,(e也可以是一個很大的數)//NSString *data = @"1234";// NSData *nsdataFromBase64String = [[NSData alloc]// initWithBase64EncodedString:base64 options:0];NSData *m = [[NSData alloc]initWithBase64EncodedString:modulus options:0];;NSData *e = [[NSData alloc]initWithBase64EncodedString:exponent options:0];;RSA *r;BIGNUM *bne, *bnn;//rsa算法中的 e和Nint blockLen;//每次最大加密字節數unsigned char *encodeData;//加密后的數據bnn = BN_new();bne = BN_new();r = RSA_new();//看到網上有人用BN_hex2bn這個函數來轉化的,但我用這個轉化總是失敗,最后選擇了BN_bin2bnr->e = BN_bin2bn([e bytes], [e length], bne);r->n = BN_bin2bn([m bytes], [m length], bnn);blockLen = RSA_size(r) - 11;// 公鑰長度/8 - 11encodeData = (unsigned char *)malloc(blockLen);bzero(encodeData, blockLen);//由于需要加密的內容都在最大加密長度內,所以我沒有分塊,如果你的文本內容長度超過了blockLen,請分塊處理,然后拼接起來int ret = RSA_public_encrypt([data length], (unsigned char *)[data UTF8String], encodeData, r, RSA_PKCS1_PADDING);//這里的 RSA_PKCS1_PADDING選擇的不同,對應的最大加密長度就不一樣,當時在網上看到過,現在找不到了,你們自己上網找找吧RSA_free(r);if(ret < 0){NSLog(@"encrypt failed !");return @"";}else{// NSData *result = [Base64 encodeBytes:encodeData length:ret];// char * a = (char*)malloc(sizeof(byte)*16);NSData *result = [NSData dataWithBytes: encodeData length:ret];NSString *cipherString = [GTMBase64 stringByEncodingData:result];// NSLog(@"加密后的base64:%@",cipherString);free(encodeData);// return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];// Byte *bytes = (Byte *)[result bytes];// NSString *hexStr=@"";// for(int i=0;i<[result length];i++)// {// NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff]; ///16進制數// if([newHexStr length]==1)// hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];// else// hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];// }// NSLog(@"bytes 的16進制數為:%@",hexStr);return cipherString;}// } }@end

  

轉載于:https://www.cnblogs.com/FranZhou/p/5852009.html

總結

以上是生活随笔為你收集整理的iOS RSA加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。