當前位置:首頁 » 安卓系統 » rsaforandroidios

rsaforandroidios

發布時間: 2023-02-14 03:41:35

1. 怎麼在ios進行rsa公鑰加密java做rsa私鑰解密

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key = keyGen.generateKeyPair(); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); //把第二個參數改為 key.getPrivate() cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); byte[] cipherText = cipher.doFinal("Message".getBytes("UTF8")); System.out.println(new String(cipherText, "UTF8")); //把第二個參數改為key.getPublic() cipher.init(Cipher.DECRYPT_MODE, key.getPrivate()); byte[] newPlainText = cipher.doFinal(cipherText); System.out.println(new String(newPlainText, "UTF8")); 正常的用公鑰加密私鑰解密就是這個過程,如果按私鑰加密公鑰解密,只要按備注改2個參數就可以。 但是我要提醒樓主,你要公鑰解密,公鑰是公開的,相當於任何人都查到公鑰可以解密。 你是想做簽名是吧。

2. iOS RSA加密生成公鑰私鑰

該命令生成一個模長 2048 位,名字為 rsa_private_key.pem 、 PKCS1 格式的 RSA 私鑰文件.

genrsa :指定生成演算法使用 RSA
-out :後面參數是生成的私鑰的文件名
2048 :生成私鑰的模長,單位位元組(bits)

根據生成的私鑰 rsa_private_key.pem 文件,生成公鑰 rsa_public_key.pem 文件

生成名字為 rsa_pkcs8_private_key.pem 的私鑰文件
Java Android 用到的密鑰:
公鑰: rsa_public_key.pem
私鑰: rsa_pkcs8_private_key.pem

終端會提示輸入國家、省市、所在地、組織、組織單位、常用名稱、郵箱地址等信息,按要求填寫(可以隨便填寫), 輸入完對應信息後會提示輸入一個密碼 :

最終會生成 rsacert.csr 文件

用最開始生成的私鑰 rsa_private_key.pem 和 rsacert.csr 證書請求文件生成一個數字證書 rsacert.crt

使用 x509 工具自建CA。由於 x509 無法建立證書請求文件,所以只能使用 openssl req 來生成請求文件,然後使用 x509 來自簽署, 也可以用來簽署他人的證書請求,即為他人頒發證書。

知識點 :
終端會提示設置密碼,該密碼是 .p12 私鑰的密碼(用 private_key.p12 私鑰解密時, 要用到該密碼, 需要記錄下 ), 會提示再次輸入檢驗剛才輸入的密碼.

3. iOS怎麼使用模和指數進行RSA加密

首先確認你要加密的數據有多大,如果比較大建議先使用對稱演算法進行加密,將對稱演算法的密鑰使用RSA加密即可。
現在定義:
你所拿到的公鑰模為 N,指數為E
N的位長度為 len(N)
N佔用的位元組數為 k = (len(N)+7)/8
要加密的數據為D (可以是你原始的數據或者對稱演算法密鑰)
如果你的加密數據比較小的話也可以直接進行RSA加密,比較小的意思為:被加密數據的長度必須能夠滿足填充條件,如果採用PKCS1_1.5的填充方式,D佔用的位元組要小於 k-11
運算過程很簡單: 將D進行填充到D1, 要求D1所佔用的位元組數為 k (即同N的長度相同)
則計算密文E的過程為 DE = (D1 ^ E) % N ( ^ 表示指數運算)
在程序中實現建議你採用一些現成的庫,如果有OpenSSL則可以網上搜索一下,資料應該不少。
如果沒有的話可以直接引入一些大數計算的庫直接進行模指運算(別分開,太慢)。

4. 如何把安卓的rsa securid倒入ios

Android版RSA SecurID軟體令牌面向已經部署RSA SecurID系統的企業用戶。該令牌可以方便地從Android Market™下載,直接免費安裝到Android設備上。只需要IT部門一點點幫助,用戶就可以用唯一的軟體令牌種子激活應用,創建一個方便、安全、經濟的RSA SecurID身份認證器。
ios是另外一套系統,你也可以下載相關軟體。

5. Android使用RSA加密和解密

1.data是要加密的數據,如果是字元串則getBytes。publicKey是公鑰,privateKey是私鑰。自定義密鑰對測試

2.從文件中讀取公鑰

當加密的數據過長時,會出現javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes的異常。rsa演算法規定一次加密的數據不能超過生成密鑰對時的keyLength/8-11,keyLength一般是1024個位元組,則加密的數據不能超過117個位元組

測試分段加密和解密

生成公鑰和私鑰後,用base64編碼

一、android加密的數據伺服器上無法解密?
android的rsa加密方式是RSA/ECB/NoPadding,而標准jdk是RSA/ECB/PKCS1Padding,所以加密時要設置標准jdk的加密方式

二、base64編碼。因為不同的設備對字元的處理方式不同,字元有可能處理出錯,不利於傳輸。所以先把數據做base64編碼,變成可見字元,減少出錯
官方提供的base64類,Base64.encode編碼,Base64.decode解碼。用這個會有換行符,需要自定義

三、rsa是非對稱加密演算法。依賴於大數計算,加密速度比des慢,通常只用於加密少量數據或密鑰

四、公鑰加密比私鑰加密塊,公鑰解密比私鑰解密慢。加密後的數據大概是加密前的1.5倍

6. IOS中怎麼做RSA加密演算法

RSA加密以及解密實現步驟:

1、使用openssl生成密匙對。

代碼如下:(代碼源於github開源社區)

#!/usr/bin/envbash
echo"GeneratingRSAkeypair..."
echo"1024RSAkey:private_key.pem"
opensslgenrsa-outprivate_key.pem1024

echo":rsaCertReq.csr"
opensslreq-new-keyprivate_key.pem-outrsaCertReq.csr

echo"createcertificationusingx509:rsaCert.crt"
opensslx509-req-days3650-inrsaCertReq.csr-signkeyprivate_key.pem-outrsaCert.crt

echo"createpublic_key.derForIOS"
opensslx509-outformder-inrsaCert.crt-outpublic_key.der

echo"createprivate_key.p12ForIOS.Pleaserememberyourpassword.ThepasswordwillbeusediniOS."
opensslpkcs12-export-outprivate_key.p12-inkeyprivate_key.pem-inrsaCert.crt

echo"creatersa_public_key.pemForJava"
opensslrsa-inprivate_key.pem-outrsa_public_key.pem-pubout
echo"createpkcs8_private_key.pemForJava"
opensslpkcs8-topk8-inprivate_key.pem-outpkcs8_private_key.pem-nocrypt

echo"finished."

2、載入證書後即可進行加密演算法。

代碼:

RSAEncryptor*rsa=[[RSAEncryptoralloc]init];

NSLog(@"encryptorusingrsa");
NSString*publicKeyPath=[[NSBundlemainBundle]pathForResource:@"public_key"ofType:@"der"];
NSLog(@"publickey:%@",publicKeyPath);
[rsaloadPublicKeyFromFile:publicKeyPath];

NSString*securityText=@"hello~";
NSString*encryptedString=[rsarsaEncryptString:securityText];
NSLog(@"encrypteddata:%@",encryptedString);

對應解密代碼:

NSLog(@"decryptorusingrsa");
[rsaloadPrivateKeyFromFile:[[NSBundlemainBundle]pathForResource:@"private_key"ofType:@"p12"]password:@"123456"];
NSString*decryptedString=[rsarsaDecryptString:encryptedString];
NSLog(@"decrypteddata:%@",decryptedString);

RSA基本原理:

RSA使用"秘匙對"對數據進行加密解密.在加密解密數據前,需要先生成公鑰(public key)和私鑰(private key)。

公鑰(public key): 用於加密數據. 用於公開, 一般存放在數據提供方, 例如iOS客戶端。

私鑰(private key): 用於解密數據. 必須保密, 私鑰泄露會造成安全問題。

7. ios開發rsa加密怎麼生成秘鑰

1、加密解密的第一步是生成公鑰、私鑰對,私鑰加密的內容能通過公鑰解密(反過來亦可以) 下載開源RSA密鑰生成工具openssl(通常Linux系統都自帶該程序),解壓縮至獨立的文件夾,進入其中的bin目錄,執行以下命令: 代碼如下: openssl genrsa -out rsa_private_key.pem 1024 openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 第一條命令生成原始 RSA私鑰文件 rsa_private_key.pem,第二條命令將原始 RSA私鑰轉換為 pkcs8格式,第三條生成RSA公鑰 rsa_public_key.pem 從上面看出通過私鑰能生成對應的公鑰,因此我們將私鑰private_key.pem用在伺服器端,公鑰發放給android跟ios等前端 2、php中用生成的公鑰、私鑰進行加密解密,直接上代碼 代碼如下: $fp=fopen("rsa/rsa_private_key.pem","r"); //你的私鑰文件路徑 $private_key=fread($fp,8192); fclose($fp); $fp1=fopen("rsa/rsa_public_key.pem","r"); //你的公鑰文件路徑 $public_key=fread($fp1,8192); fclose($fp1); //echo $private_key; $pi_key=openssl_pkey_get_private($private_key);//這個函數可用來判斷私鑰是否是可用的,可用返回資源id Resource id $pu_key=openssl_pkey_get_public($public_key );//這個函數可用來判斷公鑰是否是可用的 print_r($pi_key);echo "n"; echo "<br>"; print_r($pu_key);echo "n"; echo "<br>"; echo "<hr>"; $data='php ras加密演算法'; $encrypted = ""; $decrypted = ""; echo "加密的源數據:".$data."n"; echo "<br>"; echo "private key encrypt:n"; echo "<br>"; openssl_private_encrypt($data,$encrypted,$pi_key);//私鑰加密 $encrypted = base64_encode($encrypted);//加密後的內容通常含有特殊字元,需要編碼轉換下,在網路間通過url傳輸時要注意base64編碼是否是url安全的 echo '私鑰加密後:'.$encrypted."n"; echo "<br>";echo "<br>"; echo "public key decrypt:n"; echo "<br>"; openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私鑰加密的內容通過公鑰可用解密出來 echo '公鑰解密後:'.$decrypted."n"; echo "<br>"; echo "<hr>"; echo "public key encrypt:n"; echo "<br>"; openssl_public_encrypt($data,$encrypted,$pu_key);//公鑰加密 $encrypted = base64_encode($encrypted); echo $encrypted,"n"; echo "<br>"; echo "private key decrypt:n"; echo "<br>"; openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私鑰解密 echo $decrypted,"n"; echo "<br>"; PHP的RSA配置常見問題: ●PHP開發語言的代碼示例中openssl文件夾中的3個DLL文件用法 1、如果你的系統是windows系統,且system32文件目錄下沒有libeay32.dll、ssleay32.dll這兩個文件 那麼需要拷貝這兩個文件到system32文件目錄。 2、如果您的php安裝目錄下(phpext)中沒有php_openssl.dll 那麼請把php_openssl.dll放在這個文件夾中 喜歡加密解密的小夥伴一定要好好看看這篇文章,受益匪淺。。。

8. iOSRSA加密和SHA驗簽

RSA是一種非對稱加密演算法,常用來對傳輸數據進行加密,配合上數字摘要演算法,也可以進行文字簽名。

padding即填充方式,由於RSA加密演算法中要加密的明文是要比模數小的,padding就是通過一些填充方式來限制明文的長度。後面會詳細介紹padding的幾種模式以及分段加密。

加密:公鑰放在客戶端,並使用公鑰對數據進行加密,服務端拿到數據後用私鑰進行解密;

加簽:私鑰放在客戶端,並使用私鑰對數據進行加簽,服務端拿到數據後用公鑰進行驗簽。

前者完全為了加密;後者主要是為了防惡意攻擊,防止別人模擬我們的客戶端對我們的伺服器進行攻擊,導致伺服器癱瘓。

RSA使用「密鑰對」對數據進行加密解密,在加密解密前需要先生存公鑰(Public Key)和私鑰(Private Key)。

公鑰(Public key): 用於加密數據. 用於公開, 一般存放在數據提供方, 例如iOS客戶端。

私鑰(Private key): 用於解密數據. 必須保密, 私鑰泄露會造成安全問題。

iOS中的Security.framework提供了對RSA演算法的支持,這種方式需要對密匙對進行處理, 根據public key生成證書, 通過private key生成p12格式的密匙

首先我們要會生成RSA密鑰文件,現在一步步的來給大家展示一下,如何生成我們所需的公鑰和私鑰文件:

$ openssl genrsa -out private.pem 1024

openssl:是一個自由的軟體組織,專注做加密和解密的框架。

genrsa:指定了生成了演算法使用RSA

-out:後面的參數表示生成的key的輸入文件

1024:表示的是生成key的長度,單位位元組(bits)

$ openssl req -new -key private.pem -out rsacert.csr

可以拿著這個文件去數字證書頒發機構(即CA)申請一個數字證書。CA會給你一個新的文件cacert.pem,那才是你的數字證書。(要收費的)

$ openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt

509是一種非常通用的證書格式。

將用上面生成的密鑰privkey.pem和rsacert.csr證書請求文件生成一個數字證書rsacert.crt。這個就是公鑰

$ openssl x509 -outform der -in rsacert.crt -out rsacert.der

注意: 在 iOS開發中,公鑰是不能使用base64編碼的,上面的命令是將公鑰的base64編碼字元串轉換成二進制數據

在iOS使用私鑰不能直接使用,需要導出一個p12文件。下面命令就是將私鑰文件導出為p12文件。

$ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt

IOS客戶端的加解密首先我們需要導入Security.framework,

在ios中,我們主要關注四個函數

RSA演算法有2個作用一個是加密一個是加簽。從這幾個函數中,我們可以看到,我們第一種是使用公鑰能在客戶端:加密數據,以及伺服器端用私鑰解密。

第二個就是用私鑰在客戶端加簽,然後用公鑰在伺服器端用公鑰驗簽。第一種完全是為了加密,第二種是為了放抵賴,就是為了防止別人模擬我們的客戶端來攻擊我們的伺服器,導致癱瘓。

(1)獲取密鑰,這里是產生密鑰,實際應用中可以從各種存儲介質上讀取密鑰 (2)加密 (3)解密

(1)獲取密鑰,這里是產生密鑰,實際應用中可以從各種存儲介質上讀取密鑰 (2)獲取待簽名的Hash碼 (3)獲取簽名的字元串 (4)驗證

(1)私鑰用來進行解密和簽名,是給自己用的。

(2)公鑰由本人公開,用於加密和驗證簽名,是給別人用的。

(3)當該用戶發送文件時,用私鑰簽名,別人用他給的公鑰驗證簽名,可以保證該信息是由他發送的。當該用戶接受文件時,別人用他的公鑰加密,他用私鑰解密,可以保證該信息只能由他接收到。

使用事例:

Demo鏈接

9. ios怎麼實現RAS加密解密

轉載最近幾天折騰了一下如何在iOS上使用RSA來加密。iOS上並沒有直接的RSA加密API。但是iOS提供了x509的API,而x509是支持RSA加密的。因此,我們可以通過製作自簽名的x509證書(由於對安全性要求不高,我們並不需要使用CA認證的證書),再調用x509的相關API來進行加密。接下來記錄一下整個流程。
第一步,製作自簽名的證書
1.最簡單快捷的方法,打開Terminal,使用openssl(Mac OS X自帶)生成私鑰和自簽名的x509證書。
openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650
按照命令行的提示輸入內容就行了。
幾個說明:
public_key.der是輸出的自簽名的x509證書,即我們要用的。
private_key.pem是輸出的私鑰,用來解密的,請妥善保管。
rsa:1024這里的1024是密鑰長度,1024是比較安全的,如果需要更安全的話,可以用2048,但是加解密代價也會增加。
-days:證書過期時間,一定要加上這個參數,默認的證書過期時間是30天,一般我們不希望證書這么短就過期,所以寫上比較合適的天數,例如這里的3650(10年)。
事實上,這一行命令包含了好幾個步驟(我研究下面這些步驟的原因是我手頭已經由一個private_key.pem私鑰了,想直接用這個來生成x509證書,也就是用到了下面的2-3)
1)創建私鑰
openssl genrsa -out private_key.pem 1024
2)創建證書請求(按照提示輸入信息)
openssl req -new -out cert.csr -key private_key.pem
3)自簽署根證書
openssl x509 -req -in cert.csr -out public_key.der -outform der -signkey private_key.pem -days 3650
2.驗證證書。把public_key.der拖到xcode中,如果文件沒有問題的話,那麼就可以直接在xcode中打開,看到證書的各種信息。

第二步,使用public_key.der來進行加密。
1.導入Security.framework。
2.把public_key.der放到mainBundle中(一般直接拖到Xcode就行啦)。
3.從public_key.der讀取公鑰。
4.加密。
下面是參考代碼(只能用於加密長度小於等於116位元組的內容,適合於對密碼進行加密。使用了ARC,不過還是要注意部分資源需要使用CFRealse來釋放)
RSA.h
//
// RSA.h
//
#import <Foundation/Foundation.h>

@interface RSA : NSObject {
SecKeyRef publicKey;
SecCertificateRef certificate;
SecPolicyRef policy;
SecTrustRef trust;
size_t maxPlainLen;
}

- (NSData *) encryptWithData:(NSData *)content;
- (NSData *) encryptWithString:(NSString *)content;

@end

RSA.m
//
// RSA.m
//
#import "RSA.h"

@implementation RSA

- (id)init {
self = [super init];

NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key"
ofType:@"der"];
if (publicKeyPath == nil) {
NSLog(@"Can not find pub.der");
return nil;
}

NSDate *publicKeyFileContent = [NSData dataWithContentsOfFile:publicKeyPath];
if (publicKeyFileContent == nil) {
NSLog(@"Can not read from pub.der");
return nil;
}

certificate = SecCertificateCreateWithData(kCFAllocatorDefault, ( __bridge CFDataRef)publicKeyFileContent);
if (certificate == nil) {
NSLog(@"Can not read certificate from pub.der");
return nil;
}

policy = SecPolicyCreateBasicX509();
OSStatus returnCode = (certificate, policy, &trust);
if (returnCode != 0) {
NSLog(@" fail. Error Code: %ld", returnCode);
return nil;
}

SecTrustResultType trustResultType;
returnCode = SecTrustEvaluate(trust, &trustResultType);
if (returnCode != 0) {
NSLog(@"SecTrustEvaluate fail. Error Code: %ld", returnCode);
return nil;
}

publicKey = SecTrustCopyPublicKey(trust);
if (publicKey == nil) {
NSLog(@"SecTrustCopyPublicKey fail");
return nil;
}

maxPlainLen = SecKeyGetBlockSize(publicKey) - 12;
return self;
}

- (NSData *) encryptWithData:(NSData *)content {

size_t plainLen = [content length];
if (plainLen > maxPlainLen) {
NSLog(@"content(%ld) is too long, must < %ld", plainLen, maxPlainLen);
return nil;
}

void *plain = malloc(plainLen);
[content getBytes:plain
length:plainLen];

size_t cipherLen = 128; // 當前RSA的密鑰長度是128位元組
void *cipher = malloc(cipherLen);

OSStatus returnCode = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plain,
plainLen, cipher, &cipherLen);

NSData *result = nil;
if (returnCode != 0) {
NSLog(@"SecKeyEncrypt fail. Error Code: %ld", returnCode);
}
else {
result = [NSData dataWithBytes:cipher
length:cipherLen];
}

free(plain);
free(cipher);

return result;
}

- (NSData *) encryptWithString:(NSString *)content {
return [self encryptWithData:[content dataUsingEncoding:NSUTF8StringEncoding]];
}

- (void)dealloc{
CFRelease(certificate);
CFRelease(trust);
CFRelease(policy);
CFRelease(publicKey);
}

@end

使用方法:
RSA *rsa = [[RSA alloc] init];
if (rsa != nil) {
NSLog(@"%@",[rsa encryptWithString:@"test"]);
}
else {
NSLog(@"init rsa error");
}

熱點內容
安卓夏日傳說存檔放哪個文件 發布:2025-05-17 06:12:44 瀏覽:605
如何通過伺服器id找到主人 發布:2025-05-17 06:12:11 瀏覽:36
ug編程吧 發布:2025-05-17 06:07:45 瀏覽:71
sql臨時表和表變數 發布:2025-05-17 06:02:38 瀏覽:723
蘋果如何用安卓無線耳機 發布:2025-05-17 06:01:53 瀏覽:821
sqlserver表關系 發布:2025-05-17 06:01:02 瀏覽:996
2017途觀配置什麼音響 發布:2025-05-17 05:53:50 瀏覽:843
64位安裝sql2000 發布:2025-05-17 05:33:17 瀏覽:845
安卓手機屏幕儀哪個好 發布:2025-05-17 05:33:16 瀏覽:592
加密的備忘錄 發布:2025-05-17 05:32:30 瀏覽:743