成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語(yǔ)言rsa算法 go語(yǔ)言算法實(shí)戰(zhàn)

Golang 橢圓加密算法實(shí)現(xiàn)

橢圓曲線密碼學(xué)(英語(yǔ):Elliptic Curve Cryptography,縮寫:ECC)是一種基于橢圓曲線數(shù)學(xué)的公開密鑰加密算法。橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨(dú)立提出的。

站在用戶的角度思考問題,與客戶深入溝通,找到呂梁網(wǎng)站設(shè)計(jì)與呂梁網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋呂梁地區(qū)。

ECC的主要優(yōu)勢(shì)是在某些情況下它比其他的算法(比如RSA加密算法)使用更小的密鑰并提供相當(dāng)?shù)幕蚋叩燃?jí)的安全。ECC的另一個(gè)優(yōu)勢(shì)是可以定義群之間的雙線性映射,基于Weil對(duì)或是Tate對(duì);雙線性映射已經(jīng)在密碼學(xué)中發(fā)現(xiàn)了大量的應(yīng)用,例如基于身份的加密。

不過(guò)一個(gè)缺點(diǎn)是加密和解密操作的實(shí)現(xiàn)比其他機(jī)制花費(fèi)的時(shí)間長(zhǎng)。

一個(gè)RSA算法的加密運(yùn)算,需要完整的演算過(guò)程。

那我給你解釋下RSA吧,盡量讓你看懂:

*RSA是非對(duì)稱加密體系,也就是說(shuō)加密用一個(gè)公鑰,解密用一個(gè)私鑰,這2個(gè)密鑰不同,這點(diǎn)非常非常重要。

其實(shí)RSA非常簡(jiǎn)潔,但很美

流程

1,尋找2個(gè)大的素?cái)?shù)p,q n=p*q=33 N=(p-1)*(q-1)=20

公鑰e一般是3 私鑰d要通過(guò)公鑰e去算出來(lái)

e*d=1(mod N) 就是說(shuō)e和d的乘積模N得1 也就是e和d關(guān)于模N互為逆元

3*7=1(mod 20) 可知d=7

加密的明文設(shè)為M 加密后的密文設(shè)為c

加密過(guò)程:C=M^e(mod n)

解密過(guò)程:M=C^d(mod n)

舉個(gè)具體的例子 假如M=2

加密過(guò)程:C=2^3(mod 33)=8(mod 33)

解密過(guò)程:M=8^7(mod 33)=2097152(mod 33)=2(mod 33) 可以看出和和本來(lái)的明文是相同的。

原理可以理解為 M=M^(ed) (mod n)

本例中 e*d=21 也就是是M^21次方等于M

RSA這個(gè)特性是數(shù)論中的費(fèi)馬定理推出的

在講講細(xì)節(jié) 比如樓主加密的是26的字母 就當(dāng)明文的值是從1到26

就拿n=33說(shuō)吧 加密后的密文的值是1到33 這很正常

但是解密后 一定和明文的值相同 也就是1到26

實(shí)際情況中 公鑰e是公開的 私鑰d是保密的

比如甲要給乙發(fā)個(gè)東西 乙的公鑰由于是公開的 所以甲知道 但甲不知道乙的私鑰

甲先用乙的公鑰加密 之后 這個(gè)密文只能用乙的私鑰 由于乙的私鑰是保密的 只有他自己知道 所以保證了安全

RSA最大的安全問題是 n的分解 只要把n分解為p*q 則N=(p-1)(q-1)

根據(jù) e*d=1(mod N) 就可以通過(guò)e算出d 那么私鑰都被人算出來(lái)了 也就沒安全性而言了

不過(guò)可惜的是 大數(shù)分解是一個(gè)單向的函數(shù) 你算知道p,q算n很容易,但是知道n算出p,q相當(dāng)難

強(qiáng)調(diào)一句 n是加密解密用的 N是知道e算d的

樓主也沒說(shuō)你要干嘛 想看懂就這么多

如果要實(shí)現(xiàn)這個(gè)算法:

必須知道2點(diǎn):

1.p,q這個(gè)兩個(gè)大素?cái)?shù)的生成,這牽扯到素性檢驗(yàn),數(shù)論中是一章的內(nèi)容,沒法和你展開

2.取模運(yùn)算,由于加密解密過(guò)程可能取一個(gè)數(shù)的幾十次方的模數(shù),所以這個(gè)必須用簡(jiǎn)便的算法來(lái)化解復(fù)雜度,也就是模重復(fù)平方算法。

如果要編程中使用,太容易了

去下個(gè)dll

在java中 直接有可用于RSA的類 相當(dāng)容易

如果樓主想研究的更深 可以把郵箱 發(fā)我 RSA我以前做過(guò)一個(gè)ppt

非對(duì)稱加密之ECC橢圓曲線(go語(yǔ)言實(shí)踐)

橢圓曲線密碼學(xué)(英語(yǔ):Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的算法,基于橢圓曲線數(shù)學(xué)。橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨(dú)立提出的。

ECC的主要優(yōu)勢(shì)是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密算法——提供相當(dāng)?shù)幕蚋叩燃?jí)的安全。

橢圓曲線密碼學(xué)的許多形式有稍微的不同,所有的都依賴于被廣泛承認(rèn)的解決橢圓曲線離散對(duì)數(shù)問題的 困難性上。與傳統(tǒng)的基于大質(zhì)數(shù)因子分解困難性的加密方法不同,ECC通過(guò)橢圓曲線方程式的性質(zhì)產(chǎn)生密鑰。

ECC 164位的密鑰產(chǎn)生的一個(gè)安全級(jí)相當(dāng)于RSA 1024位密鑰提供的保密強(qiáng)度,而且計(jì)算量較小,處理速度 更快,存儲(chǔ)空間和傳輸帶寬占用較少。目前我國(guó) 居民二代身份證 正在使用 256 位的橢圓曲線密碼,虛擬 貨幣 比特幣 也選擇ECC作為加密算法。

具體算法詳解參考:

7 Go密碼學(xué)(四) 非對(duì)稱加密之RSA

對(duì)稱加密有非常好的安全性,其加解密計(jì)算的性能也較高,但其有兩個(gè)重要缺點(diǎn):

在如今開放的信息社會(huì),秘鑰的管理愈加困難,非公開的秘鑰機(jī)制雖然破解較難,但還是有遭到攻擊的可能性,由于對(duì)稱加密需要加解密雙方共同握有私鑰,所有生成秘鑰的一方必須分發(fā)給另一方才能進(jìn)行安全通行,這就難免秘鑰在網(wǎng)絡(luò)中傳輸,網(wǎng)絡(luò)是不可靠的,其有可能被攔截或篡改。于是就產(chǎn)生了公開秘鑰體制,即服務(wù)方根據(jù)特定算法產(chǎn)生一對(duì)鑰匙串,自己持有私鑰小心保存,而公鑰公開分發(fā),在通信中,由公鑰加密進(jìn)行網(wǎng)絡(luò)傳輸,而傳輸?shù)男畔⒅荒苡伤借€解密,這就解決了秘鑰分發(fā)的問。公開秘鑰體制就是非對(duì)稱加密,非對(duì)稱加密一般有兩種用途:

如今的非對(duì)稱加密比較可靠的有RSA算法和ECC算法(橢圓曲線算法),RSA的受眾最多,但近年來(lái)隨著比特幣、區(qū)塊鏈的興起,ECC加密算法也越來(lái)越受到青睞。下面我們先介紹一下RSA加密算法的使用,ECC我們下一講展開。

公鑰密碼體系都是要基于一個(gè)困難問題來(lái)保證其安全性的,RSA是基于大數(shù)分解,將一個(gè)即使是計(jì)算機(jī)也無(wú)能為力的數(shù)學(xué)問題作為安全壁壘是現(xiàn)代密碼學(xué)的實(shí)現(xiàn)原理。講述這類數(shù)學(xué)問題需要龐雜的數(shù)論基礎(chǔ),此相關(guān)部分在此不再展開,感興趣的請(qǐng)出門右拐搜索歐幾里得證明、歐拉函數(shù)等數(shù)論部分知識(shí)。

Go標(biāo)準(zhǔn)庫(kù)中crypto/rsa包實(shí)現(xiàn)了RSA加解密算法,并通過(guò)crypto/x509包實(shí)現(xiàn)私鑰序列化為ASN.1的DER編碼字符串的方法,我們還使用編解碼包encoding/pem(實(shí)現(xiàn)了PEM數(shù)據(jù)編碼,該格式源自保密增強(qiáng)郵件協(xié)議,目前PEM編碼主要用于TLS密鑰和證書。)將公私鑰數(shù)據(jù)編碼為pem格式的證書文件。

使用以上加解密方法:

加密解密字符串的算法原理

我們經(jīng)常需要一種措施來(lái)保護(hù)我們的數(shù)據(jù),防止被一些懷有不良用心的人所看到或者破壞。在信息時(shí)代,信息可以幫助團(tuán)體或個(gè)人,使他們受益,同樣,信息也可以用來(lái)對(duì)他們構(gòu)成威脅,造成破壞。在競(jìng)爭(zhēng)激烈的大公司中,工業(yè)間諜經(jīng)常會(huì)獲取對(duì)方的情報(bào)。因此,在客觀上就需要一種強(qiáng)有力的安全措施來(lái)保護(hù)機(jī)密數(shù)據(jù)不被竊取或篡改。數(shù)據(jù)加密與解密從宏觀上講是非常簡(jiǎn)單的,很容易理解。加密與解密的一些方法是非常直接的,很容易掌握,可以很方便的對(duì)機(jī)密數(shù)據(jù)進(jìn)行加密和解密。

一:數(shù)據(jù)加密方法

在傳統(tǒng)上,我們有幾種方法來(lái)加密數(shù)據(jù)流。所有這些方法都可以用軟件很容易的實(shí)現(xiàn),但是當(dāng)我們只知道密文的時(shí)候,是不容易破譯這些加密算法的(當(dāng)同時(shí)有原文和密文時(shí),破譯加密算法雖然也不是很容易,但已經(jīng)是可能的了)。最好的加密算法對(duì)系統(tǒng)性能幾乎沒有影響,并且還可以帶來(lái)其他內(nèi)在的優(yōu)點(diǎn)。例如,大家都知道的pkzip,它既壓縮數(shù)據(jù)又加密數(shù)據(jù)。又如,dbms的一些軟件包總是包含一些加密方法以使復(fù)制文件這一功能對(duì)一些敏感數(shù)據(jù)是無(wú)效的,或者需要用戶的密碼。所有這些加密算法都要有高效的加密和解密能力。

幸運(yùn)的是,在所有的加密算法中最簡(jiǎn)單的一種就是“置換表”算法,這種算法也能很好達(dá)到加密的需要。每一個(gè)數(shù)據(jù)段(總是一個(gè)字節(jié))對(duì)應(yīng)著“置換表”中的一個(gè)偏移量,偏移量所對(duì)應(yīng)的值就輸出成為加密后的文件。加密程序和解密程序都需要一個(gè)這樣的“置換表”。事實(shí)上,80x86 cpu系列就有一個(gè)指令‘xlat’在硬件級(jí)來(lái)完成這樣的工作。這種加密算法比較簡(jiǎn)單,加密解密速度都很快,但是一旦這個(gè)“置換表”被對(duì)方獲得,那這個(gè)加密方案就完全被識(shí)破了。更進(jìn)一步講,這種加密算法對(duì)于黑客破譯來(lái)講是相當(dāng)直接的,只要找到一個(gè)“置換表”就可以了。這種方法在計(jì)算機(jī)出現(xiàn)之前就已經(jīng)被廣泛的使用。

對(duì)這種“置換表”方式的一個(gè)改進(jìn)就是使用2個(gè)或者更多的“置換表”,這些表都是基于數(shù)據(jù)流中字節(jié)的位置的,或者基于數(shù)據(jù)流本身。這時(shí),破譯變的更加困難,因?yàn)楹诳捅仨氄_的做幾次變換。通過(guò)使用更多的“置換表”,并且按偽隨機(jī)的方式使用每個(gè)表,這種改進(jìn)的加密方法已經(jīng)變的很難破譯。比如,我們可以對(duì)所有的偶數(shù)位置的數(shù)據(jù)使用a表,對(duì)所有的奇數(shù)位置使用b表,即使黑客獲得了明文和密文,他想破譯這個(gè)加密方案也是非常困難的,除非黑客確切的知道用了兩張表。

與使用“置換表”相類似,“變換數(shù)據(jù)位置”也在計(jì)算機(jī)加密中使用。但是,這需要更多的執(zhí)行時(shí)間。從輸入中讀入明文放到一個(gè)buffer中,再在buffer中對(duì)他們重排序,然后按這個(gè)順序再輸出。解密程序按相反的順序還原數(shù)據(jù)。這種方法總是和一些別的加密算法混合使用,這就使得破譯變的特別的困難,幾乎有些不可能了。例如,有這樣一個(gè)詞,變換起字母的順序,slient 可以變?yōu)閘isten,但所有的字母都沒有變化,沒有增加也沒有減少,但是字母之間的順序已經(jīng)變化了。

但是,還有一種更好的加密算法,只有計(jì)算機(jī)可以做,就是字/字節(jié)循環(huán)移位和xor操作。如果我們把一個(gè)字或字節(jié)在一個(gè)數(shù)據(jù)流內(nèi)做循環(huán)移位,使用多個(gè)或變化的方向(左移或右移),就可以迅速的產(chǎn)生一個(gè)加密的數(shù)據(jù)流。這種方法是很好的,破譯它就更加困難!而且,更進(jìn)一步的是,如果再使用xor操作,按位做異或操作,就就使破譯密碼更加困難了。如果再使用偽隨機(jī)的方法,這涉及到要產(chǎn)生一系列的數(shù)字,我們可以使用fibbonaci數(shù)列。對(duì)數(shù)列所產(chǎn)生的數(shù)做模運(yùn)算(例如模3),得到一個(gè)結(jié)果,然后循環(huán)移位這個(gè)結(jié)果的次數(shù),將使破譯次密碼變的幾乎不可能!但是,使用fibbonaci數(shù)列這種偽隨機(jī)的方式所產(chǎn)生的密碼對(duì)我們的解密程序來(lái)講是非常容易的。

在一些情況下,我們想能夠知道數(shù)據(jù)是否已經(jīng)被篡改了或被破壞了,這時(shí)就需要產(chǎn)生一些校驗(yàn)碼,并且把這些校驗(yàn)碼插入到數(shù)據(jù)流中。這樣做對(duì)數(shù)據(jù)的防偽與程序本身都是有好處的。但是感染計(jì)算機(jī)程序的病毒才不會(huì)在意這些數(shù)據(jù)或程序是否加過(guò)密,是否有數(shù)字簽名。所以,加密程序在每次load到內(nèi)存要開始執(zhí)行時(shí),都要檢查一下本身是否被病毒感染,對(duì)與需要加、解密的文件都要做這種檢查!很自然,這樣一種方法體制應(yīng)該保密的,因?yàn)椴《境绦虻木帉懻邔?huì)利用這些來(lái)破壞別人的程序或數(shù)據(jù)。因此,在一些反病毒或殺病毒軟件中一定要使用加密技術(shù)。

循環(huán)冗余校驗(yàn)是一種典型的校驗(yàn)數(shù)據(jù)的方法。對(duì)于每一個(gè)數(shù)據(jù)塊,它使用位循環(huán)移位和xor操作來(lái)產(chǎn)生一個(gè)16位或32位的校驗(yàn)和 ,這使得丟失一位或兩個(gè)位的錯(cuò)誤一定會(huì)導(dǎo)致校驗(yàn)和出錯(cuò)。這種方式很久以來(lái)就應(yīng)用于文件的傳輸,例如 xmodem-crc。 這是方法已經(jīng)成為標(biāo)準(zhǔn),而且有詳細(xì)的文檔。但是,基于標(biāo)準(zhǔn)crc算法的一種修改算法對(duì)于發(fā)現(xiàn)加密數(shù)據(jù)塊中的錯(cuò)誤和文件是否被病毒感染是很有效的。

二.基于公鑰的加密算法

一個(gè)好的加密算法的重要特點(diǎn)之一是具有這種能力:可以指定一個(gè)密碼或密鑰,并用它來(lái)加密明文,不同的密碼或密鑰產(chǎn)生不同的密文。這又分為兩種方式:對(duì)稱密鑰算法和非對(duì)稱密鑰算法。所謂對(duì)稱密鑰算法就是加密解密都使用相同的密鑰,非對(duì)稱密鑰算法就是加密解密使用不同的密鑰。非常著名的pgp公鑰加密以及rsa加密方法都是非對(duì)稱加密算法。加密密鑰,即公鑰,與解密密鑰,即私鑰,是非常的不同的。從數(shù)學(xué)理論上講,幾乎沒有真正不可逆的算法存在。例如,對(duì)于一個(gè)輸入‘a(chǎn)’執(zhí)行一個(gè)操作得到結(jié)果‘b’,那么我們可以基于‘b’,做一個(gè)相對(duì)應(yīng)的操作,導(dǎo)出輸入‘a(chǎn)’。在一些情況下,對(duì)于每一種操作,我們可以得到一個(gè)確定的值,或者該操作沒有定義(比如,除數(shù)為0)。對(duì)于一個(gè)沒有定義的操作來(lái)講,基于加密算法,可以成功地防止把一個(gè)公鑰變換成為私鑰。因此,要想破譯非對(duì)稱加密算法,找到那個(gè)唯一的密鑰,唯一的方法只能是反復(fù)的試驗(yàn),而這需要大量的處理時(shí)間。

rsa加密算法使用了兩個(gè)非常大的素?cái)?shù)來(lái)產(chǎn)生公鑰和私鑰。即使從一個(gè)公鑰中通過(guò)因數(shù)分解可以得到私鑰,但這個(gè)運(yùn)算所包含的計(jì)算量是非常巨大的,以至于在現(xiàn)實(shí)上是不可行的。加密算法本身也是很慢的,這使得使用rsa算法加密大量的數(shù)據(jù)變的有些不可行。這就使得一些現(xiàn)實(shí)中加密算法都基于rsa加密算法。pgp算法(以及大多數(shù)基于rsa算法的加密方法)使用公鑰來(lái)加密一個(gè)對(duì)稱加密算法的密鑰,然后再利用一個(gè)快速的對(duì)稱加密算法來(lái)加密數(shù)據(jù)。這個(gè)對(duì)稱算法的密鑰是隨機(jī)產(chǎn)生的,是保密的,因此,得到這個(gè)密鑰的唯一方法就是使用私鑰來(lái)解密。

我們舉一個(gè)例子:假定現(xiàn)在要加密一些數(shù)據(jù)使用密鑰‘12345’。利用rsa公鑰,使用rsa算法加密這個(gè)密鑰‘12345’,并把它放在要加密的數(shù)據(jù)的前面(可能后面跟著一個(gè)分割符或文件長(zhǎng)度,以區(qū)分?jǐn)?shù)據(jù)和密鑰),然后,使用對(duì)稱加密算法加密正文,使用的密鑰就是‘12345’。當(dāng)對(duì)方收到時(shí),解密程序找到加密過(guò)的密鑰,并利用rsa私鑰解密出來(lái),然后再確定出數(shù)據(jù)的開始位置,利用密鑰‘12345’來(lái)解密數(shù)據(jù)。這樣就使得一個(gè)可靠的經(jīng)過(guò)高效加密的數(shù)據(jù)安全地傳輸和解密。

一些簡(jiǎn)單的基于rsa算法的加密算法可在下面的站點(diǎn)找到:

三.一個(gè)嶄新的多步加密算法

現(xiàn)在又出現(xiàn)了一種新的加密算法,據(jù)說(shuō)是幾乎不可能被破譯的。這個(gè)算法在1998年6月1日才正式公布的。下面詳細(xì)的介紹這個(gè)算法:

使用一系列的數(shù)字(比如說(shuō)128位密鑰),來(lái)產(chǎn)生一個(gè)可重復(fù)的但高度隨機(jī)化的偽隨機(jī)的數(shù)字的序列。一次使用256個(gè)表項(xiàng),使用隨機(jī)數(shù)序列來(lái)產(chǎn)生密碼轉(zhuǎn)表,如下所示:

把256個(gè)隨機(jī)數(shù)放在一個(gè)距陣中,然后對(duì)他們進(jìn)行排序,使用這樣一種方式(我們要記住最初的位置)使用最初的位置來(lái)產(chǎn)生一個(gè)表,隨意排序的表,表中的數(shù)字在0到255之間。如果不是很明白如何來(lái)做,就可以不管它。但是,下面也提供了一些原碼(在下面)是我們明白是如何來(lái)做的?,F(xiàn)在,產(chǎn)生了一個(gè)具體的256字節(jié)的表。讓這個(gè)隨機(jī)數(shù)產(chǎn)生器接著來(lái)產(chǎn)生這個(gè)表中的其余的數(shù),以至于每個(gè)表是不同的。下一步,使用"shotgun technique"技術(shù)來(lái)產(chǎn)生解碼表?;旧险f(shuō),如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一個(gè)在0到255之間的數(shù))。在一個(gè)循環(huán)中賦值,使用一個(gè)256字節(jié)的解碼表它對(duì)應(yīng)于我們剛才在上一步產(chǎn)生的256字節(jié)的加密表。

使用這個(gè)方法,已經(jīng)可以產(chǎn)生這樣的一個(gè)表,表的順序是隨機(jī),所以產(chǎn)生這256個(gè)字節(jié)的隨機(jī)數(shù)使用的是二次偽隨機(jī),使用了兩個(gè)額外的16位的密碼.現(xiàn)在,已經(jīng)有了兩張轉(zhuǎn)換表,基本的加密解密是如下這樣工作的。前一個(gè)字節(jié)密文是這個(gè)256字節(jié)的表的索引。或者,為了提高加密效果,可以使用多余8位的值,甚至使用校驗(yàn)和或者crc算法來(lái)產(chǎn)生索引字節(jié)。假定這個(gè)表是256*256的數(shù)組,將會(huì)是下面的樣子:

crypto1 = a[crypto0][value]

變量'crypto1'是加密后的數(shù)據(jù),'crypto0'是前一個(gè)加密數(shù)據(jù)(或著是前面幾個(gè)加密數(shù)據(jù)的一個(gè)函數(shù)值)。很自然的,第一個(gè)數(shù)據(jù)需要一個(gè)“種子”,這個(gè)“種子” 是我們必須記住的。如果使用256*256的表,這樣做將會(huì)增加密文的長(zhǎng)度?;蛘撸梢允褂媚惝a(chǎn)生出隨機(jī)數(shù)序列所用的密碼,也可能是它的crc校驗(yàn)和。順便提及的是曾作過(guò)這樣一個(gè)測(cè)試: 使用16個(gè)字節(jié)來(lái)產(chǎn)生表的索引,以128位的密鑰作為這16個(gè)字節(jié)的初始的"種子"。然后,在產(chǎn)生出這些隨機(jī)數(shù)的表之后,就可以用來(lái)加密數(shù)據(jù),速度達(dá)到每秒鐘100k個(gè)字節(jié)。一定要保證在加密與解密時(shí)都使用加密的值作為表的索引,而且這兩次一定要匹配。

加密時(shí)所產(chǎn)生的偽隨機(jī)序列是很隨意的,可以設(shè)計(jì)成想要的任何序列。沒有關(guān)于這個(gè)隨機(jī)序列的詳細(xì)的信息,解密密文是不現(xiàn)實(shí)的。例如:一些ascii碼的序列,如“eeeeeeee"可能被轉(zhuǎn)化成一些隨機(jī)的沒有任何意義的亂碼,每一個(gè)字節(jié)都依賴于其前一個(gè)字節(jié)的密文,而不是實(shí)際的值。對(duì)于任一個(gè)單個(gè)的字符的這種變換來(lái)說(shuō),隱藏了加密數(shù)據(jù)的有效的真正的長(zhǎng)度。

如果確實(shí)不理解如何來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù)序列,就考慮fibbonacci數(shù)列,使用2個(gè)雙字(64位)的數(shù)作為產(chǎn)生隨機(jī)數(shù)的種子,再加上第三個(gè)雙字來(lái)做xor操作。 這個(gè)算法產(chǎn)生了一系列的隨機(jī)數(shù)。算法如下:

unsigned long dw1, dw2, dw3, dwmask;

int i1;

unsigned long arandom[256];

dw1 = {seed #1};

dw2 = {seed #2};

dwmask = {seed #3};

// this gives you 3 32-bit "seeds", or 96 bits total

for(i1=0; i1 256; i1++)

{

dw3 = (dw1 + dw2) ^ dwmask;

arandom[i1] = dw3;

dw1 = dw2;

dw2 = dw3;

}

如果想產(chǎn)生一系列的隨機(jī)數(shù)字,比如說(shuō),在0和列表中所有的隨機(jī)數(shù)之間的一些數(shù),就可以使用下面的方法:

int __cdecl mysortproc(void *p1, void *p2)

{

unsigned long **pp1 = (unsigned long **)p1;

unsigned long **pp2 = (unsigned long **)p2;

if(**pp1 **pp2)

return(-1);

else if(**pp1 *pp2)

return(1);

return(0);

}

...

int i1;

unsigned long *aprandom[256];

unsigned long arandom[256]; // same array as before, in this case

int aresult[256]; // results go here

for(i1=0; i1 256; i1++)

{

aprandom[i1] = arandom + i1;

}

// now sort it

qsort(aprandom, 256, sizeof(*aprandom), mysortproc);

// final step - offsets for pointers are placed into output array

for(i1=0; i1 256; i1++)

{

aresult[i1] = (int)(aprandom[i1] - arandom);

}

...

變量'aresult'中的值應(yīng)該是一個(gè)排過(guò)序的唯一的一系列的整數(shù)的數(shù)組,整數(shù)的值的范圍均在0到255之間。這樣一個(gè)數(shù)組是非常有用的,例如:對(duì)一個(gè)字節(jié)對(duì)字節(jié)的轉(zhuǎn)換表,就可以很容易并且非??煽康膩?lái)產(chǎn)生一個(gè)短的密鑰(經(jīng)常作為一些隨機(jī)數(shù)的種子)。這樣一個(gè)表還有其他的用處,比如說(shuō):來(lái)產(chǎn)生一個(gè)隨機(jī)的字符,計(jì)算機(jī)游戲中一個(gè)物體的隨機(jī)的位置等等。上面的例子就其本身而言并沒有構(gòu)成一個(gè)加密算法,只是加密算法一個(gè)組成部分。

作為一個(gè)測(cè)試,開發(fā)了一個(gè)應(yīng)用程序來(lái)測(cè)試上面所描述的加密算法。程序本身都經(jīng)過(guò)了幾次的優(yōu)化和修改,來(lái)提高隨機(jī)數(shù)的真正的隨機(jī)性和防止會(huì)產(chǎn)生一些短的可重復(fù)的用于加密的隨機(jī)數(shù)。用這個(gè)程序來(lái)加密一個(gè)文件,破解這個(gè)文件可能會(huì)需要非常巨大的時(shí)間以至于在現(xiàn)實(shí)上是不可能的。

四.結(jié)論:

由于在現(xiàn)實(shí)生活中,我們要確保一些敏感的數(shù)據(jù)只能被有相應(yīng)權(quán)限的人看到,要確保信息在傳輸?shù)倪^(guò)程中不會(huì)被篡改,截取,這就需要很多的安全系統(tǒng)大量的應(yīng)用于政府、大公司以及個(gè)人系統(tǒng)。數(shù)據(jù)加密是肯定可以被破解的,但我們所想要的是一個(gè)特定時(shí)期的安全,也就是說(shuō),密文的破解應(yīng)該是足夠的困難,在現(xiàn)實(shí)上是不可能的,尤其是短時(shí)間內(nèi)。

關(guān)于RSA算法加密,麻煩高手教一下!!先謝謝了!

我寫的這個(gè)淺顯易懂,看看你就明白了。舉得有例子。

RSA算法舉例說(shuō)明

知道里面剛才回答了另個(gè)朋友的問題帖出來(lái)給你看看

題目:用RSA算法加密時(shí),已經(jīng)公鑰是(e=7,n=20),私鑰是(e=3,n=20),用公鑰對(duì)消息M=3加密,得到的密文是_____?

給出詳細(xì)過(guò)程。 謝謝!

答:

你所說(shuō)的:

n=20

d=7 公鑰

e=3 私鑰

對(duì)M=3 進(jìn)行加密

M'=M^d%n (M的d次方,然后除以n取余數(shù))

M'=3^7%20=2187%20=7 加密后等於7

對(duì)M'=7進(jìn)行解密

M=M'^e%n=7^3%20=343%20=3 解密后又變成3了

你取的兩個(gè)素?cái)?shù)太小了,所以n太小根本起不了作用。至少要取1024位的數(shù)字

網(wǎng)站欄目:go語(yǔ)言rsa算法 go語(yǔ)言算法實(shí)戰(zhàn)
文章位置:http://jinyejixie.com/article40/dodhoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、標(biāo)簽優(yōu)化、ChatGPT、微信公眾號(hào)、外貿(mào)建站網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
彰化市| 余江县| 新平| 和政县| 永新县| 崇信县| 南郑县| 广东省| 健康| 东平县| 新河县| 博湖县| 汶川县| 莱阳市| 山丹县| 汾阳市| 巴南区| 右玉县| 铜陵市| 织金县| 积石山| 新沂市| 弋阳县| 平果县| 本溪| 阿拉善盟| 临夏市| 柞水县| 宁强县| 什邡市| 河池市| 子长县| 恭城| 萨嘎县| 屏东县| 塔城市| 读书| 深水埗区| 保定市| 皋兰县| 广昌县|