導航:首頁 > 文檔加密 > ras加密解密以及密鑰生成

ras加密解密以及密鑰生成

發布時間:2022-10-18 11:20:11

❶ 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放在這個文件夾中 喜歡加密解密的小夥伴一定要好好看看這篇文章,受益匪淺。。。

❷ RAS加密是什麼

RSA是最流行的非對稱加密演算法之一。也被稱為公鑰加密。
RSA是非對稱的,也就是用來加密的密鑰和用來解密的密鑰不是同一個。和DES一樣的是,RSA也是分組加密演算法,不同的是分組大小可以根據密鑰的大小而改變。如果加密的數據不是分組大小的整數倍,則會根據具體的應用方式增加額外的填充位。

❸ RAS加解密詳解

RSA演算法是現今使用最廣泛的公鑰密碼演算法,也是號稱地球上最安全的加密演算法。在了解RSA演算法之前,先熟悉下幾個術語
根據密鑰的使用方法,可以將密碼分為對稱密碼和公鑰密碼
對稱密碼:加密和解密使用同一種密鑰的方式
公鑰密碼:加密和解密使用不同的密碼的方式,因此公鑰密碼通常也稱為非對稱密碼。

RSA的加密過程可以使用一個通式來表達

也就是說RSA加密是對明文的E次方後除以N後求余數的過程。就這么簡單?對,就是這么簡單。
從通式可知,只要知道E和N任何人都可以進行RSA加密了,所以說E、N是RSA加密的密鑰,也就是說 E和N的組合就是公鑰 ,我們用(E,N)來表示公鑰

不過E和N不並不是隨便什麼數都可以的,它們都是經過嚴格的數學計算得出的,關於E和N擁有什麼樣的要求及其特性後面會講到。順便啰嗦一句E是加密(Encryption)的首字母,N是數字(Number)的首字母

RSA的解密同樣可以使用一個通式來表達

也就是說對密文進行D次方後除以N的余數就是明文,這就是RSA解密過程。知道D和N就能進行解密密文了,所以D和N的組合就是私鑰

從上述可以看出RSA的加密方式和解密方式是相同的,加密是求「E次方的mod N」;解密是求「D次方的mod N」
此處D是解密(Decryption)的首字母;N是數字(Number)的首字母。

小結下

既然公鑰是(E,N),私鑰是(D,N)所以密鑰對即為(E,D,N)但密鑰對是怎樣生成的?步驟如下:

准備兩個質數p,q。這兩個數不能太小,太小則會容易破解,將p乘以q就是N

L 是 p-1 和 q-1的最小公倍數,可用如下表達式表示

E必須滿足兩個條件:E是一個比1大比L小的數,E和L的最大公約數為1
用gcd(X,Y)來表示X,Y的最大公約數則E條件如下(gcd釋義:greatest common divisor>):

之所以需要E和L的最大公約數為1是為了保證一定存在解密時需要使用的數D。現在我們已經求出了E和N也就是說我們已經生成了密鑰對中的公鑰了。

數D是由數E計算出來的。D、E和L之間必須滿足以下關系:

只要D滿足上述2個條件,則通過E和N進行加密的密文就可以用D和N進行解密。
簡單地說條件2是為了保證密文解密後的數據就是明文。
現在私鑰自然也已經生成了,密鑰對也就自然生成了。
小結下:

我們用具體的數字來實踐下RSA的密鑰對對生成,及其加解密對全過程。為方便我們使用較小數字來模擬。

我們准備兩個很小對質數,
p = 17
q = 19
N = p * q = 323

L = lcm(p-1, q-1)= lcm(16,18) = 144
144為16和18對最小公倍數

求E必須要滿足2個條件:1 < E < L ,gcd(E,L)=1
即1 < E < 144,gcd(E,144) = 1
E和144互為質數,5顯然滿足上述2個條件
故E = 5

此時 公鑰=(E,N)= (5,323)

求D也必須滿足2個條件:1 < D < L,E*D mod L = 1
即1 < D < 144,5 * D mod 144 = 1
顯然當D= 29 時滿足上述兩個條件
1 < 29 < 144
5*29 mod 144 = 145 mod 144 = 1
此時 私鑰=(D,N)=(29,323)

准備的明文必須時小於N的數,因為加密或者解密都要mod N其結果必須小於N
假設明文 = 123

解密後的明文為123。

至此RSA的演算法原理已經講解完畢

❹ 簡述RSA演算法中密鑰的產生,數據加密和解密的過程,並簡單說明RSA演算法安全性的原理。

RSA演算法的數學原理

RSA演算法的數學原理:
先來找出三個數, p, q, r,

其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數。

p, q, r 這三個數便是 private key。接著, 找出m, 使得 rm == 1 mod (p-1)(q-1)..... 這個 m 一定存在, 因為 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了..... 再來, 計算 n = pq....... m, n 這兩個數便是 public key。

編碼過程是, 若資料為 a, 將其看成是一個大整數, 假設 a < n.... 如果 a >= n 的話, 就將 a 表成 s 進位 (s <= n, 通常取 s = 2^t), 則每一位數均小於 n, 然後分段編碼...... 接下來, 計算 b == a^m mod n, (0 <= b < n), b 就是編碼後的資料...... 解碼的過程是, 計算 c == b^r mod pq (0 <= c < pq), 於是乎, 解碼完畢...... 等會會證明 c 和 a 其實是相等的 :) 如果第三者進行竊聽時, 他會得到幾個數: m, n(=pq), b...... 他如果要解碼的話, 必須想辦法得到 r...... 所以, 他必須先對 n 作質因數分解......... 要防止他分解, 最有效的方法是找兩個非常的大質數 p, q, 使第三者作因數分解時發生困難......... <定理> 若 p, q 是相異質數, rm == 1 mod (p-1)(q-1), a 是任意一個正整數, b == a^m mod pq, c == b^r mod pq, 則 c == a mod pq 證明的過程, 會用到費馬小定理, 敘述如下: m 是任一質數, n 是任一整數, 則 n^m == n mod m (換另一句話說, 如果 n 和 m 互質, 則 n^(m-1) == 1 mod m) 運用一些基本的群論的知識, 就可以很容易地證出費馬小定理的........ <證明> 因為 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整數 因為在 molo 中是 preserve 乘法的 (x == y mod z and u == v mod z => xu == yv mod z), 所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq 1. 如果 a 不是 p 的倍數, 也不是 q 的倍數時, 則 a^(p-1) == 1 mod p (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod p a^(q-1) == 1 mod q (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod q 所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1 即 a^(k(p-1)(q-1)) == 1 mod pq => c == a^(k(p-1)(q-1)+1) == a mod pq 2. 如果 a 是 p 的倍數, 但不是 q 的倍數時, 則 a^(q-1) == 1 mod q (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod q => c == a^(k(p-1)(q-1)+1) == a mod q => q | c - a 因 p | a => c == a^(k(p-1)(q-1)+1) == 0 mod p => p | c - a 所以, pq | c - a => c == a mod pq 3. 如果 a 是 q 的倍數, 但不是 p 的倍數時, 證明同上 4. 如果 a 同時是 p 和 q 的倍數時, 則 pq | a => c == a^(k(p-1)(q-1)+1) == 0 mod pq => pq | c - a => c == a mod pq Q.E.D. 這個定理說明 a 經過編碼為 b 再經過解碼為 c 時, a == c mod n (n = pq).... 但我們在做編碼解碼時, 限制 0 <= a < n, 0 <= c < n, 所以這就是說 a 等於 c, 所以這個過程確實能做到編碼解碼的功能.....

❺ RSA加密解密過程

為了這道題把好幾年前學的東西重新看了一遍,累覺不愛。。。


不清楚你了不了解RSA過程,先跟說一下吧

  1. 隨機產生兩個大素數p和q作為密鑰對。此題:p=13,q=17,n =p*q=221

  2. 隨機產生一個加密密鑰e,使e 和(p-1)*(q-1)互素。此題:e=83

  3. 公鑰就是(n,e)。此題:(221,83)

  4. 通過e*d mod (p-1)*(q-1)=1生成解密密鑰d, ,n與d也要互素。此題:(d*83)≡1mod192

  5. 私鑰就是(n,d)。此題:(221,155)

  6. 之後發送者用公鑰加密明文M,得到密文C=M^e mod n

  7. 接受者利用私鑰解密M=C^d mod n


求解d呢,就是求逆元,de = 1 mod n這種形式就稱de於模數n說互逆元,可以看成de-ny=1,此題83e-192y=1.

用擴展的歐幾里得演算法。其實就是輾轉相除

此題:

192=2*83+26

83=3*26+5

26=5*5+1

求到余數為1了,就往回寫

1=26-5*5

=26-5*(83-3*26)

=(192-2*83)-5*(83-3*(192-2*83))

=16*192-37*83

則d=-37,取正後就是155.

記住,往回寫的時候數不該換的一定不要換,比如第二步中的26,一定不能換成(83-5)/3,那樣就求不出來了,最終一定要是192和83相關聯的表達式。還有,最好保持好的書寫格式,比如第一步2*83+26時第二步最好寫成3*26+5而不是26*3+5,要不步驟比較多的話容易亂

❻ ras加密或解密

RAS加密和64base加密都是雙向加密,只要有密鑰就可以解密
而MD5加密是單向加密,無法解密。

❼ 簡述DES演算法與RAS演算法加密與解密的思想

DES是對二元數字分組加密的分組密碼演算法,分組長度為64比特。每64位明文加密成64位密文,沒有數據壓縮和擴展,密鑰長度為56比特,若輸入64比特,則第8,16,24,32,40,48,56,64為奇偶檢驗位,所以,實際密鑰只有56位。DES演算法完全公開,其保密性完全依賴密鑰。

❽ RAS加密的數學原理

RSA演算法是現今使用最廣泛的公鑰密碼演算法,也是號稱地球上最安全的加密演算法。在了解RSA演算法之前,先熟悉下幾個術語根據密鑰的使用方法,可以將密碼分為對稱密碼和公鑰密碼

對稱加密:加密和解密使用同一種密鑰的方式

非對稱加密:加密和解密使用不同的密碼的方式,因此公鑰密碼通常也稱為非對稱密碼。

好多人都知道RSA加密的數學公式,但是不知道其的內部運作,那麼我們以下就詳細分析一波!

圖1,mod就是取余的意思,上面公式的意思是3的多少次方除以17餘數為12。由圖2可知道3的13次方的時候就滿足圖1的公式。由圖2的可知,公式後面的余數都是不一樣的,而且是1-16。當我們好奇試試3^17%17時候,結果就是3,好明顯等於了3^1%17的結果,那麼我們稱 3為17的原根 。

思考:任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關系?

計算這個值的方式叫做歐拉函數,使用:Φ(n)表示

計算8的歐拉函數,和8互質的 1 、2、 3 、4、 5 、6、 7 、8    所以 φ(8) = 4

計算7的歐拉函數,和7互質的  1、2、3、4、5、6 、7  所以  φ(7) = 6

計算56的歐拉函數:φ(56) = φ(8)*  φ(7) = 4 * 6 = 24

如果兩個正整數,除了1以外,沒有其他公因數,我們就稱這兩個數是 互質關系 (coprime)。

一、當n是質數的時候,φ(n)=n-1。

二、如果n可以分解成兩個互質的整數之積,如n=A*B則: φ(A*B)=φ(A)*φ(B)

根據以上兩點得到:如果N是兩個質數P1 和 P2的乘積則:φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1)

如果兩個正整數m和n互質,那麼m的φ(n)次方減去1,可以被n整除。如圖3所示:

我們可以設置互質的數如m=5和n=3,那麼φ(3) = 3-1=2,5^2%3=1。所以上面的公式是成立的。(有興趣的可以試多一點數字,注意是互質的兩個數)

歐拉定理的特殊情況:如果兩個正整數m和n互質,而且n為質數!那麼φ(n)結果就是n-1。如圖4所示:

注意:滿足第3步的時候,m必須要小於n。

如果兩個正整數e和x互質,那麼一定可以找到整數d,使得 ed-1 被x整除。那麼d就是e對於x的「模反元素」。如圖6所示:

公鑰: n和e

私鑰: n和d

明文:   m

密文:    c

1、n會非常大,長度一般為1024個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)

2、由於需要求出φ(n),所以根據歐函數特點,最簡單的方式n ,由兩個質數相乘得到:

質數:p1、p2  Φ(n) = (p1 -1) * (p2 - 1)

3、最終由φ(n)得到e 和 d 。

總共生成6個數字:p1、p2、n、φ(n)、e、d

除了公鑰用到了n和e其餘的4個數字是不公開的。目前破解RSA得到d的方式如下:

1、要想求出私鑰 d  。由於e*d = φ(n)*k + 1。要知道e和φ(n);

2、e是知道的,但是要得到 φ(n),必須知道p1和 p2。

3、由於 n=p1*p2。只有將n因數分解才能算出。

❾ 簡述DES演算法與RAS演算法加密與解密的思想

DES是一種單一密鑰加解密演算法。通信主體只有一個密鑰,該密鑰部隊第三方公開。RSA則是公鑰/私鑰系統。該系統比DES系統更原子化,具有普遍應用意義。 nDES演算法利用一個56+8奇偶校驗位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密鑰對以64位為單位的塊數據進行加解密。 第一步:生成16個子鑰(48位)第二步:用子鑰對64位數據加密RSA具體演算法如下:隨機選定兩個大素數p, q.

❿ 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");
}

閱讀全文

與ras加密解密以及密鑰生成相關的資料

熱點內容
微信為什麼不能設置加密認證 瀏覽:672
鄧倫參加密室逃脫視頻 瀏覽:391
音頻壓縮編碼標准 瀏覽:300
常提到的app是表示什麼 瀏覽:261
天津程序員傳銷 瀏覽:349
下班之後的程序員 瀏覽:73
檢測支持ssl加密演算法 瀏覽:344
衢州發布新聞什麼APP 瀏覽:85
中國移動長沙dns伺服器地址 瀏覽:251
wifi密碼加密了怎麼破解嗎 瀏覽:598
linux命令cpu使用率 瀏覽:69
linux實用命令 瀏覽:240
傳奇引擎修改在線時間命令 瀏覽:111
php取域名中間 瀏覽:899
cad命令欄太小 瀏覽:831
php開發環境搭建eclipse 瀏覽:484
qt文件夾名稱大全 瀏覽:216
金山雲伺服器架構 瀏覽:233
安卓系統筆記本怎麼切換系統 瀏覽:622
u盤加密快2個小時還沒有搞完 瀏覽:95