对称加密和不对称加密原理
?
本文轉(zhuǎn)載至?http://my.oschina.net/freelife/blog/109048 java加密解密?java對稱不對稱?md5?des?
私鑰加密(對稱加密?symmetric cryptography):私鑰加密算法使用單個私鑰來加密和解密數(shù)據(jù)。由于具有密鑰的任意一方都可以使用該密鑰解密數(shù)據(jù),因此必須保護密鑰不被未經(jīng)授權(quán)的代理得到。私鑰加密又稱為對稱加密,因為同一密鑰既用于加密又用于解密。私鑰加密算法非常快(與公鑰算法相比),特別適用于對較大的數(shù)據(jù)流執(zhí)行加密轉(zhuǎn)換。Well-known secret key cryptographic algorithms include the Data Encryption Standard (DES), triple-strength DES (3DES), Rivest Cipher 2 (RC2), and Rivest Cipher 4 (RC4).
通常,私鑰算法(稱為塊密碼)用于一次加密一個數(shù)據(jù)塊。塊密碼(如?RC2、DES、TripleDES?和?Rijndael)通過加密將?n?字節(jié)的輸入塊轉(zhuǎn)換為加密字節(jié)的輸出塊。如果要加密或解密字節(jié)序列,必須逐塊進行。由于?n?很小(對于?RC2、DES?和?TripleDES,n?=?8?字節(jié);n?=?16?[默認值];n?=?24;對于?Rijndael,n?=?32),因此必須對大于?n?的數(shù)據(jù)值一次加密一個塊。?基類庫中提供的塊密碼類使用稱作密碼塊鏈?(CBC)?的鏈模式,它使用一個密鑰和一個初始化向量?(IV)?對數(shù)據(jù)執(zhí)行加密轉(zhuǎn)換。對于給定的私鑰k,一個不使用初始化向量的簡單塊密碼將把相同的明文輸入塊加密為同樣的密文輸出塊。如果在明文流中有重復(fù)的塊,那么在密文流中將存在重復(fù)的塊。如果未經(jīng)授權(quán)的用戶知道有關(guān)明文塊的結(jié)構(gòu)的任何信息,就可以使用這些信息解密已知的密文塊并有可能發(fā)現(xiàn)您的密鑰。若要克服這個問題,可將上一個塊中的信息混合到加密下一個塊的過程中。這樣,兩個相同的明文塊的輸出就會不同。由于該技術(shù)使用上一個塊加密下一個塊,因此使用了一個?IV?來加密數(shù)據(jù)的第一個塊。使用該系統(tǒng),未經(jīng)授權(quán)的用戶有可能知道的公共消息標頭將無法用于對密鑰進行反向工程。
可以危及用此類型密碼加密的數(shù)據(jù)的一個方法是,對每個可能的密鑰執(zhí)行窮舉搜索。根據(jù)用于執(zhí)行加密的密鑰大小,即使使用最快的計算機執(zhí)行這種搜索,也極其耗時,因此難以實施。使用較大的密鑰大小將使解密更加困難。雖然從理論上說加密不會使對手無法檢索加密的數(shù)據(jù),但這確實極大增加了這樣做的成本。如果執(zhí)行徹底搜索來檢索只在幾天內(nèi)有意義的數(shù)據(jù)需要花費三個月的時間,那么窮舉搜索的方法是不實用的。私鑰加密的缺點是它假定雙方已就密鑰和?IV?達成協(xié)議,并且互相傳達了密鑰和?IV?的值。并且,密鑰必須對未經(jīng)授權(quán)的用戶保密。由于存在這些問題,私鑰加密通常與公鑰加密一起使用,來秘密地傳達密鑰和?IV?的值。
最早、最著名的保密密鑰或?qū)ΨQ密鑰加密算法DES(Data Encryption Standard)/DESede是由IBM公司在70年代發(fā)展起來的,并經(jīng)政府的加密標準篩選后,于1976年11月被美國政府采用,DES隨后被美國國家標準局和美國國家標準協(xié)會(American National Standard Institute,ANSI)承認。DES使用56位密鑰對64位的數(shù)據(jù)塊進行加密,并對64位的數(shù)據(jù)塊進行16輪編碼。與每輪編碼時,一個48位的"每輪"密鑰值由56位的完整密鑰得出來。
.NET??提供以下實現(xiàn)類以提供對稱的密鑰加密算法:???DESCryptoServiceProvider?
??RC2CryptoServiceProvider
??RijndaelManaged
??TripleDESCryptoServiceProvider
?
公鑰加密(不對稱加密,?RSA, DSA, DH???asymmetric cryptography?):公鑰加密使用一個必須對未經(jīng)授權(quán)的用戶保密的私鑰和一個可以對任何人公開的公鑰。公鑰和私鑰都在數(shù)學(xué)上相關(guān)聯(lián);用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰簽名的數(shù)據(jù)只能用公鑰驗證。公鑰可以提供給任何人;公鑰用于對要發(fā)送到私鑰持有者的數(shù)據(jù)進行加密。兩個密鑰對于通信會話都是唯一的。公鑰加密算法也稱為不對稱算法,原因是需要用一個密鑰加密數(shù)據(jù)而需要用另一個密鑰來解密數(shù)據(jù)。對稱算法的根本原理就是單向函數(shù),f(a)=b,但是用b很難得到a。公鑰加密算法使用固定的緩沖區(qū)大小,而私鑰加密算法使用長度可變的緩沖區(qū)。公鑰算法無法像私鑰算法那樣將數(shù)據(jù)鏈接起來成為流,原因是它只可以加密少量數(shù)據(jù)。因此,不對稱操作不使用與對稱操作相同的流模型。
雙方(小紅和小明)可以按照下列方式使用公鑰加密。首先,小紅生成一個公鑰/私鑰對。如果小明想要給小紅發(fā)送一條加密的消息,他將向她索要她的公鑰。小紅通過不安全的網(wǎng)絡(luò)將她的公鑰發(fā)送給小明,小明接著使用該密鑰加密消息。(如果小明在不安全的信道如公共網(wǎng)絡(luò)上收到小紅的密鑰,則小明必須同小紅驗證他具有她的公鑰的正確副本。)小明將加密的消息發(fā)送給小紅,而小紅使用她的私鑰解密該消息。但是,在傳輸小紅的公鑰期間,未經(jīng)授權(quán)的代理可能截獲該密鑰。而且,同一代理可能截獲來自小明的加密消息。但是,該代理無法用公鑰解密該消息。該消息只能用小紅的私鑰解密,而該私鑰沒有被傳輸。小紅不使用她的私鑰加密給小明的答復(fù)消息,原因是任何具有公鑰的人都可以解密該消息。如果小紅想要將消息發(fā)送回小明,她將向小明索要他的公鑰并使用該公鑰加密她的消息。然后,小明使用與他相關(guān)聯(lián)的私鑰來解密該消息。
在一個實際方案中,小紅和小明使用公鑰(不對稱)加密來傳輸私(對稱)鑰,而對他們的會話的其余部分使用私鑰加密(由于對稱加密快捷,用于實際的數(shù)據(jù)加密,而利用不對稱加密的方式解決對稱加密中私鑰傳遞的不安全性,此為對稱和不對稱加密結(jié)合的加密方式)。公鑰加密具有更大的密鑰空間(或密鑰的可能值范圍),因此不大容易受到對每個可能密鑰都進行嘗試的窮舉攻擊。由于不必保護公鑰,因此它易于分發(fā)。公鑰算法可用于創(chuàng)建數(shù)字簽名以驗證數(shù)據(jù)發(fā)送方的身份。但是,公鑰算法非常慢(與私鑰算法相比),不適合用來加密大量數(shù)據(jù)。公鑰算法僅對傳輸很少量的數(shù)據(jù)有用。公鑰加密通常用于加密一個私鑰算法將要使用的密鑰和?IV。傳輸密鑰和?IV?后,會話的其余部分將使用私鑰加密。
RSA系統(tǒng)是諸多此類算法中最著名、最多使用的一種。RSA公開密鑰密碼系統(tǒng)是由R.Rivest、A.Shamir和L.Adleman俊教授于1977年提出的。RSA的取名就是來自于這三位發(fā)明者的姓的第一個字母RSA(Rivest-Shamir-Adleman)算法是基于大數(shù)不可能被質(zhì)因數(shù)分解假設(shè)的公鑰體系。簡單地說就是找兩個很大的質(zhì)數(shù)。一個對外公開的為“公鑰”(Prblic key) ,另一個不告訴任何人,稱為"私鑰”(Private key)。這兩個密鑰是互補的,也就是說用公鑰加密的密文可以用私鑰解密,反過來也一樣。
公鑰的傳輸:要啟動安全通訊,通信兩端必須首先得到相同的共享密鑰(主密鑰),但共享密鑰不能通過網(wǎng)絡(luò)相互發(fā)送,因為這種做法極易泄密。Diffie-Hellman算法是用于密鑰交換的最早最安全的算法之一。
RSA算法:RSA算法是基于大數(shù)難于分解的原理。不但可以用于認證,也可以用于密鑰傳輸,例子可以參考RSAUtil.java文件。那么用戶A和B如何利用RSA算法來傳輸密鑰呢?
1:A產(chǎn)生一個密鑰K,用B的公鑰加密K,然后將得到的密文發(fā)送給B。
2:B用自己的私鑰解密收到的密鑰,就可以得到密鑰。
DH算法:DH算法的出現(xiàn)就是用來進行密鑰傳輸?shù)摹H算法是基于離散對數(shù)實現(xiàn)的。DH算法的基本工作原理是:通信雙方公開或半公開交換一些準備用來生成密鑰的"材料數(shù)據(jù)",在彼此交換過密鑰生成"材料"后,兩端可以各自生成出完全一樣的共享密鑰。在任何時候,雙方都絕不交換真正的密鑰。通信雙方交換的密鑰生成"材料",長度不等,"材料"長度越長,所生成的密鑰強度也就越高,密鑰破譯就越困難。除進行密鑰交換外,IPSec還使用DH算法生成所有其他加密密鑰。?
在通信前,用戶A和B雙方約定2個大整數(shù)n和g,其中1<g<n,這兩個整數(shù)可以公開
1) A隨機產(chǎn)生一個大整數(shù)a,然后計算Ka=ga mod n(a需要保密)
2) B隨機產(chǎn)生一個大整數(shù)b,然后計算Kb=gb mod n(b需要保密)
3) A把Ka發(fā)送給B,B把Kb發(fā)送給A
4) A計算K=Kba mod n
5) B計算K=Kab mod n
由于Kba mod n= (gb mod n)a mod n= (ga mod n)b mod n,因此可以保證雙方得到的K是相同的,K即是共享的密鑰。可以參考JCE文檔中的DH 3 party的例子。
實際的一個用DH算法傳遞DES私鑰的JAVA例子參看“JAVA上加密算法的實現(xiàn)用例”一文中的末一個例子,過程如下:假設(shè)A和B通信(JCE中只支持DH算法作為傳遞私鑰的算法)
A利用KeyPairGenerator類生成一個鑰對類KeyPair并可通過generatePublic方法產(chǎn)生公鑰PublicKey(puA)和getPrivate方法私鑰PrivateKey(prA)。A把puA發(fā)給B。B用類X509EncodedKeySpec解碼,然后利用KeyFactory類生成puA,轉(zhuǎn)換成DHPublicKey類利用其getParams方法取得參數(shù)類DHParameterSpec,B再利用此參數(shù)類,通過KeyPairGenerator類的initialize方法生成KeyPairGenerator實例從而用generateKeyPair方法生成B的KeyPair。進而B生成puB和prB,B把puB發(fā)給A。A利用puB和prA作為參數(shù),分別調(diào)用KeyAgreement類的init和doPhase方法初始化,然后用generateSecret方法生成各自的DES的密鑰SecretKey,此密鑰是相同的,即可用Cipher類進行加解密了。
.NET??通過抽象基類?(System.Security.Crytography.AsymmetricAlgorithm)?提供下列非對稱(公鑰/私鑰)加密算法:??DSACryptoServiceProvider
??RSACryptoServiceProvider
數(shù)字簽名?
公鑰算法還可用于構(gòu)成數(shù)字簽名。數(shù)字簽名驗證發(fā)送方的身份(如果您信任發(fā)送方的公鑰)并幫助保護數(shù)據(jù)的完整性。?
為了使用公鑰加密對消息進行數(shù)字簽名,小紅首先將哈希算法應(yīng)用于該消息以創(chuàng)建消息摘要。該消息摘要是數(shù)據(jù)的緊湊且唯一的表示形式。然后,小紅用她的私鑰加密該消息摘要以創(chuàng)建她的個人簽名。在收到消息和簽名時,小明使用小紅的公鑰解密簽名以恢復(fù)消息摘要,并使用與小紅所使用的相同的哈希算法來散列消息。如果小明計算的消息摘要與從小紅那里收到的消息摘要完全一致,小明就可以確定該消息來自私鑰的持有人,并且數(shù)據(jù)未被修改過。如果小明相信小紅是私鑰的持有人,則他知道該消息來自小紅。?
請注意,由于發(fā)送方的公鑰為大家所周知,并且它通常包含在數(shù)字簽名格式中,因此任何人都可以驗證簽名。此方法不保守消息的機密;若要使消息保密,還必須對消息進行加密。?
.NET Framework 提供以下實現(xiàn)數(shù)字簽名算法的類:?
DSACryptoServiceProvider?
RSACryptoServiceProvider
CA證書 Public Key Certificates(參考這里)
A public key certificate provides a safe way for an entity to pass on its public key to be used in asymmetric cryptography. The public key certificate avoids the following situation: if Charlie creates his own public key and private key, he can claim that he is Alice and send his public key to Bob. Bob will be able to communicate with Charlie, but Bob will think that he is sending his data to Alice.
A public key certificate can be thought of as the digital equivalent of a passport. It is issued by a trusted organization and provides identification for the bearer. A trusted organization that issues public key certificates is known as a certificate authority (CA). The CA can be likened to a notary public. To obtain a certificate from a CA, one must provide proof of identity. Once the CA is confident that the applicant represents the organization it says it represents, the CA signs the certificate attesting to the validity of the information contained within the certificate.?
A public key certificate contains several fields, including:?
Issuer - The issuer is the CA that issued the certificate. If a user trusts the CA that issues a certificate, and if the certificate is valid, the user can trust the certificate.
Period of validity - A certificate has an expiration date, and this date is one piece of information that should be checked when verifying the validity of a certificate.
Subject - The subject field includes information about the entity that the certificate represents.
Subject's public key - The primary piece of information that the certificate provides is the subject's public key. All the other fields are provided to ensure the validity of this key.
Signature - The certificate is digitally signed by the CA that issued the certificate. The signature is created using the CA's private key and ensures the validity of the certificate. Because only the certificate is signed, not the data sent in the SSL transaction, SSL does not provide for non-repudiation.?
If Bob only accepts Alice's public key as valid when she sends it in a public key certificate, Bob will not be fooled into sending secret information to Charlie when Charlie masquerades as Alice.?
Multiple certificates may be linked in a certificate chain. When a certificate chain is used, the first certificate is always that of the sender. The next is the certificate of the entity that issued the sender's certificate. If there are more certificates in the chain, each is that of the authority that issued the previous certificate. The final certificate in the chain is the certificate for a root CA. A root CA is a public certificate authority that is widely trusted. Information for several root CAs is typically stored in the client's Internet browser. This information includes the CA's public key. Well-known CAs include VeriSign, Entrust, and GTE CyberTrust.?
哈希值?
哈希算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨后的哈希計算都將產(chǎn)生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的。?
消息身份驗證代碼 (MAC) 哈希函數(shù)通常與數(shù)字簽名一起用于對數(shù)據(jù)進行簽名,而消息檢測代碼 (MDC) 哈希函數(shù)則用于數(shù)據(jù)完整性。?
雙方(小紅和小明)可按下面的方式使用哈希函數(shù)來確保數(shù)據(jù)的完整性。如果小紅對小明編寫一條消息并創(chuàng)建該消息的哈希,則小明可以在稍后散列該消息并將他的哈希與原始哈希進行比較。如果兩個哈希值相同,則該消息沒有被更改;如果值不相同,則該消息在小紅編寫它之后已被更改。為了使此系統(tǒng)發(fā)揮作用,小紅必須對除小明外的所有人保密原始的哈希值。
When sending encrypted data, SSL typically uses a cryptographic hash function to ensure data integrity. The hash function prevents Charlie from tampering with data that Alice sends to Bob.?
A cryptographic hash function is similar to a checksum. The main difference is that while a checksum is designed to detect accidental alterations in data, a cryptographic hash function is designed to detect deliberate alterations. When data is processed by a cryptographic hash function, a small string of bits, known as a hash, is generated. The slightest change to the message typically makes a large change in the resulting hash. A cryptographic hash function does not require a cryptographic key. Two hash functions often used with SSL are Message Digest 5 (MD5) and Secure Hash Algorithm (SHA). SHA was proposed by the US National Institute of Science and Technology (NIST).?
Message Authentication Code:?A message authentication code (MAC) is similar to a cryptographic hash, except that it is based on a secret key. When secret key information is included with the data that is processed by a cryptographic hash function, the resulting hash is known as an HMAC.?
If Alice wants to be sure that Charlie does not tamper with her message to Bob, she can calculate an HMAC for her message and append the HMAC to her original message. She can then encrypt the message plus the HMAC using a secret key she shares with Bob. When Bob decrypts the message and calculates the HMAC, he will be able to tell if the message was modified in transit. With SSL, an HMAC is used with the transmission of secure data.?
.NET Framework 提供以下實現(xiàn)數(shù)字簽名算法的類:?
HMACSHA1?
MACTripleDES?
MD5CryptoServiceProvider?
SHA1Managed?
SHA256Managed?
SHA384Managed?
SHA512Managed
摘要函數(shù)(MD2、MD4和MD5,還有SHA1等算法(產(chǎn)生一個20字節(jié)的二進制數(shù)組))
摘要是一種防止改動的方法,其中用到的函數(shù)叫摘要函數(shù)。這些函數(shù)的輸入可以是任意大小的消息,而輸出是一個固定長度的摘要。摘要有這樣一個性質(zhì),如果改變了輸入消息中的任何東西,甚至只有一位,輸出的摘要將會發(fā)生不可預(yù)測的改變,也就是說輸入消息的每一位對輸出摘要都有影響。總之,摘要算法從給定的文本塊中產(chǎn)生一個數(shù)字簽名(fingerprint或message digest),數(shù)字簽名可以用于防止有人從一個簽名上獲取文本信息或改變文本信息內(nèi)容。摘要算法的數(shù)字簽名原理在很多加密算法中都被使用,如S/KEY和PGP(pretty good privacy)。
現(xiàn)在流行的摘要函數(shù)有MD4和MD5。MD2摘要算法的設(shè)計是出于下面的考慮:利用32位RISC結(jié)構(gòu)來最大其吞吐量,而不需要大量的替換表(substitution table)。MD4算法將消息的給予對長度作為輸入,產(chǎn)生一個128位的"指紋"或"消息化"。要產(chǎn)生兩個具有相同消息化的文字塊或者產(chǎn)生任何具有預(yù)先給定"指紋"的消息,都被認為在計算上是不可能的。MD5摘要算法是個數(shù)據(jù)認證標準。MD5的設(shè)計思想是要找出速度更快但更不安全的MD4中潛在的不安全,MD5的設(shè)計者通過使MD5在計算上慢下來,以及對這些計算做了一些基礎(chǔ)性的改動來解決這個問題。MD5在RFC1321中給出文檔描述,是MD4算法的一個擴展。美國國家標準技術(shù)研究所的SHA1和麻省理工學(xué)院Ronald Rivest提出的MD5是為代表。HMAC-MD5算法(消息摘要5)基于RFC1321。MD5對MD4做了改進,計算速度比MD4稍慢,但安全性能得到了進一步改善。MD5在計算中使用了64個32位常數(shù),最終生成一個128位的完整性檢查和。
HMAC-SHA算法:安全Hash算法定義在NIST FIPS 180-1,其算法以MD5為原型。SHA在計算中使用了79個32位常數(shù),最終產(chǎn)生一個160位完整性檢查和。SHA檢查和長度比MD5更長,因此安全性也更高。
隨機數(shù)生成
隨機數(shù)生成是許多加密操作不可分割的組成部分。例如,加密密鑰需要盡可能地隨機,以便使生成的密鑰很難再現(xiàn)。加密隨機數(shù)生成器必須生成無法以計算方法推算出(低于 p < .05 的概率)的輸出;即,任何推算下一個輸出位的方法不得比隨機猜測具有更高的成功概率。.NET Framework 中的類使用隨機數(shù)生成器生成加密密鑰。
在商務(wù)領(lǐng)域的應(yīng)用
許多人都知道NETSCAPE公司是Internet商業(yè)中領(lǐng)先技術(shù)的提供者,該公司提供了一種基于RSA和保密密鑰的應(yīng)用于因特網(wǎng)的技術(shù),被稱為安全插座層(Secure Sockets Layer,SSL)。
也許很多人知道Socket,它是一個編程界面,并不提供任何安全措施,而SSL不但提供編程界面,而且向上提供一種安全的服務(wù),SSL3.0現(xiàn)在已經(jīng)應(yīng)用到了服務(wù)器和瀏覽器上,SSL2.0則只能應(yīng)用于服務(wù)器端。
SSL3.0用一種電子證書(electric certificate)來實行身份進行驗證后,雙方就可以用保密密鑰進行安全的會話了。它同時使用“對稱”和“非對稱”加密方法,在客戶與電子商務(wù)的服務(wù)器進行溝通的過程中,客戶會產(chǎn)生一個Session Key,然后客戶用服務(wù)器端的公鑰將Session Key進行加密,再傳給服務(wù)器端,在雙方都知道Session Key后,傳輸?shù)臄?shù)據(jù)都是以Session Key進行加密與解密的,但服務(wù)器端發(fā)給用戶的公鑰必需先向有關(guān)發(fā)證機關(guān)申請,以得到公證。
基于SSL3.0提供的安全保障,用戶就可以自由訂購商品并且給出信用卡號了,也可以在網(wǎng)上和合作伙伴交流商業(yè)信息并且讓供應(yīng)商把訂單和收貨單從網(wǎng)上發(fā)過來,這樣可以節(jié)省大量的紙張,為公司節(jié)省大量的電話、傳真費用。在過去,電子信息交換(Electric Data Interchange,EDI)、信息交易(information transaction)和金融交易(financial transaction)都是在專用網(wǎng)絡(luò)上完成的,使用專用網(wǎng)的費用大大高于互聯(lián)網(wǎng)。正是這樣巨大的誘惑,才使人們開始發(fā)展因特網(wǎng)上的電子商務(wù),但不要忘記數(shù)據(jù)加密。
SSL(Secure Sockets Layer) or TSL (Transport Layer Security)
Secure Sockets Layer (SSL) is the most widely used protocol for implementing cryptography on the Web. SSL uses a combination of cryptographic processes to provide secure communication over a network. This section provides an introduction to SSL and the cryptographic processes it uses.?
SSL provides a secure enhancement to the standard TCP/IP sockets protocol used for Internet communications. As shown in the "TCP/IP Protocol Stack With SSL" figure below, the secure sockets layer is added between the transport layer and the application layer in the standard TCP/IP protocol stack. The application most commonly used with SSL is Hypertext Transfer Protocol (HTTP), the protocol for Internet Web pages.
SSL was developed by Netscape in 1994, and with input from the Internet community, has evolved to become a standard. It is now under the control of the international standards organization, the Internet Engineering Task Force (IETF). The IETF has renamed SSL to Transport Layer Security (TLS), and released the first specification, version 1.0, in January 1999. TLS 1.0 is a modest upgrade to the most recent version of SSL, version 3.0. The differences between SSL 3.0 and TLS 1.0 are minor.
One of the reasons SSL is effective is that it uses several different cryptographic processes. SSL uses public key cryptography to provide authentication, and secret key cryptography and digital signatures to provide for privacy and data integrity. Before you can understand SSL, it is helpful to understand these cryptographic processes.
常用算法比較
數(shù)據(jù)加密標準(DES)是一個古老的對稱密鑰加密算法,目前已經(jīng)不再使用。它不是一個很安全的算法。?
三重DES(Triple-DES)仍然是很安全的,但是也只是在別無他法的情況下的一個較好的選擇。顯然高級加密標準(AES)是一個更好的加密算法,NIST用AES代替Triple-DES作為他們的標準(下面有更詳細的討論)。其他較好的算法包括另外兩個AES的變種算法Twofish和Serpent-也稱為CAST-128,它是效率和安全的完美結(jié)合。這幾個算法不僅比DES更安全,而且也比DES的速度更快。為什么要使用一些又慢又不安全的算法呢?
SHA1是一個哈希函數(shù),而不是一個加密函數(shù)。作為一個哈希函數(shù),SHA1還是相當(dāng)優(yōu)秀的,但是還需要幾年的發(fā)展才能用作加密算法。如果你正在設(shè)計一個新系統(tǒng),那么謹記你可能會在若干年后用SHA1代替目前的算法。我再重復(fù)一遍:只是可能。?
RSA是一個公開密鑰加密算法。RSA的密鑰長度一般為2048-4096位。如果你現(xiàn)在的系統(tǒng)使用的是1024位的公開密鑰,也沒有必要擔(dān)心,但是你可以加長密鑰長度來達到更好的加密效果。?
高級加密標準(AES)是一個用來代替數(shù)據(jù)加密標準(DES)的算法。目前使用的一般為128,196和256位密鑰,這三種密鑰都是相當(dāng)安全的。而且美國政府也是這樣認為的。他們批準將128位密鑰的AES算法用于一般數(shù)據(jù)加密,196位和256位密鑰的AES算法用于秘密數(shù)據(jù)和絕密數(shù)據(jù)的加密。?
DESX是DES的一個改進版本。DESX的原理是利用一個隨機的二進制數(shù)與加密前的數(shù)據(jù)以及解密后的數(shù)據(jù)異或。雖然也有人批評這種算法,但是與DES相比DESX確實更安全,不過DESX在許多情況下并不適用。我曾經(jīng)處理過一個硬件支持DES的系統(tǒng),由于有些環(huán)節(jié)不能容忍三重DES的慢速,我們在這些地方使用了DESX來代替DES。然而,這是一個非常特殊的情況。如果你需要使用DESX,理由顯而易見(可能和我不得不使用DESX的原因類似)。但我建議你使用AES或者上面我提到的一些算法。?
RC4是一種常用于SSL連接的數(shù)據(jù)流加密算法。它已經(jīng)出現(xiàn)很多年了,而且有很多已知和可能的缺陷,因此在一些新的工程中不要使用它。如果你目前正在使用它而且可以輕易的卸載它,那么情況也不是很壞。不過,我懷疑如果你現(xiàn)在正在使用它,你不可能輕易的卸載它。如果不能將它從系統(tǒng)中輕易的卸載,那么你還是考慮今后怎樣升級它,但是不要感到很驚慌。我不會拒絕在一個使用RC4算法來加密SSL連接的網(wǎng)站購買東西,但是如果我現(xiàn)在要新建一個系統(tǒng),那么我會考慮使用其他的算法,例如:AES。?
對于下面兩個算法MD5-RSA和SHA1-DSA,他們是用于數(shù)字簽名的。但是不要使用MD5,因為它有很多缺陷。很多年前大家就知道MD5中存在漏洞,不過直到今年夏天才破解出來。我們可以將SHA1和RSA或DSA配合在一起使用,目前DSA的密鑰位數(shù)高達1024位,這個密鑰位數(shù)已經(jīng)足夠長了,因此不需要擔(dān)心安全問題。然而,如果NIST實現(xiàn)了更長的密鑰位數(shù)當(dāng)然更好。?
X.509證書是一個數(shù)據(jù)結(jié)構(gòu),常用于規(guī)定比特和字節(jié)的順序,它本身不是一個密碼系統(tǒng)。它通常包含一個RSA密鑰,也可能包含一個DSA密鑰。但是X.509證書內(nèi)部以及證書本身并不是加密技術(shù)。
總結(jié)
以上是生活随笔為你收集整理的对称加密和不对称加密原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springMVC 前后台日期格式传值解
- 下一篇: PyQt5 Introduction a