私鑰加密(對稱加密 symmetric cryptography):私鑰加密算法使用單個私鑰來加密和解密數據。因爲具備密鑰的任意一方均可以使用該密鑰解密數據,所以必須保護密鑰不被未經受權的代理獲得。私鑰加密又稱爲對稱加密,由於同一密鑰既用於加密又用於解密。私鑰加密算法很是快(與公鑰算法相比),特別適用於對較大的數據流執行加密轉換。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).
一般,私鑰算法(稱爲塊密碼)用於一次加密一個數據塊。塊密碼(如 RC二、DES、TripleDES 和 Rijndael)經過加密將 n 字節的輸入塊轉換爲加密字節的輸出塊。若是要加密或解密字節序列,必須逐塊進行。因爲 n 很小(對於 RC二、DES 和 TripleDES,n = 8 字節;n = 16 [默認值];n = 24;對於 Rijndael,n = 32),所以必須對大於 n 的數據值一次加密一個塊。
基類庫中提供的塊密碼類使用稱做密碼塊鏈 (CBC) 的鏈模式,它使用一個密鑰和一個初始化向量 (IV) 對數據執行加密轉換。對於給定的私鑰k,一個不使用初始化向量的簡單塊密碼將把相同的明文輸入塊加密爲一樣的密文輸出塊。若是在明文流中有重複的塊,那麼在密文流中將存在重複的塊。若是未經受權的用戶知道有關明文塊的結構的任何信息,就可使用這些信息解密已知的密文塊並有可能發現您的密鑰。若要克服這個問題,可將上一個塊中的信息混合到加密下一個塊的過程當中。這樣,兩個相同的明文塊的輸出就會不一樣。因爲該技術使用上一個塊加密下一個塊,所以使用了一個 IV 來加密數據的第一個塊。使用該系統,未經受權的用戶有可能知道的公共消息標頭將沒法用於對密鑰進行反向工程。
能夠危及用此類型密碼加密的數據的一個方法是,對每一個可能的密鑰執行窮舉搜索。根據用於執行加密的密鑰大小,即便使用最快的計算機執行這種搜索,也極其耗時,所以難以實施。使用較大的密鑰大小將使解密更加困難。雖然從理論上說加密不會使對手沒法檢索加密的數據,但這確實極大增長了這樣作的成本。若是執行完全搜索來檢索只在幾天內有意義的數據須要花費三個月的時間,那麼窮舉搜索的方法是不實用的。
私鑰加密的缺點是它假定雙方已就密鑰和 IV 達成協議,而且互相傳達了密鑰和 IV 的值。而且,密鑰必須對未經受權的用戶保密。因爲存在這些問題,私鑰加密一般與公鑰加密一塊兒使用,來祕密地傳達密鑰和 IV 的值。
最先、最著名的保密密鑰或對稱密鑰加密算法DES(Data Encryption Standard)/DESede是由IBM公司在70年代發展起來的,並經政府的加密標準篩選後,於1976年11月被美國政府採用,DES隨後被美國國家標準局和美國國家標準協會(American National Standard Institute,ANSI)認可。DES使用56位密鑰對64位的數據塊進行加密,並對64位的數據塊進行16輪編碼。與每輪編碼時,一個48位的"每輪"密鑰值由56位的完整密鑰得出來。
.NET 提供如下實現類以提供對稱的密鑰加密算法:
• DESCryptoServiceProvider
• RC2CryptoServiceProvider
• RijndaelManaged
• TripleDESCryptoServiceProvider
公鑰加密(不對稱加密, RSA, DSA, DH asymmetric cryptography ):公鑰加密使用一個必須對未經受權的用戶保密的私鑰和一個能夠對任何人公開的公鑰。公鑰和私鑰都在數學上相關聯;用公鑰加密的數據只能用私鑰解密,而用私鑰簽名的數據只能用公鑰驗證。公鑰能夠提供給任何人;公鑰用於對要發送到私鑰持有者的數據進行加密。兩個密鑰對於通訊會話都是惟一的。公鑰加密算法也稱爲不對稱算法,緣由是須要用一個密鑰加密數據而須要用另外一個密鑰來解密數據。對稱算法的根本原理就是單向函數,f(a)=b,可是用b很可貴到a。
公鑰加密算法使用固定的緩衝區大小,而私鑰加密算法使用長度可變的緩衝區。公鑰算法沒法像私鑰算法那樣將數據連接起來成爲流,緣由是它只能夠加密少許數據。所以,不對稱操做不使用與對稱操做相同的流模型。
雙方(小紅和小明)能夠按照下列方式使用公鑰加密。首先,小紅生成一個公鑰/私鑰對。若是小明想要給小紅髮送一條加密的消息,他將向她索要她的公鑰。小紅經過不安全的網絡將她的公鑰發送給小明,小明接着使用該密鑰加密消息。(若是小明在不安全的信道如公共網絡上收到小紅的密鑰,則小明必須同小紅驗證他具備她的公鑰的正確副本。)小明將加密的消息發送給小紅,而小紅使用她的私鑰解密該消息。
可是,在傳輸小紅的公鑰期間,未經受權的代理可能截獲該密鑰。並且,同一代理可能截獲來自小明的加密消息。可是,該代理沒法用公鑰解密該消息。該消息只能用小紅的私鑰解密,而該私鑰沒有被傳輸。小紅不使用她的私鑰加密給小明的答覆消息,緣由是任何具備公鑰的人均可以解密該消息。若是小紅想要將消息發送回小明,她將向小明索要他的公鑰並使用該公鑰加密她的消息。而後,小明使用與他相關聯的私鑰來解密該消息。
在一個實際方案中,小紅和小明使用公鑰(不對稱)加密來傳輸私(對稱)鑰,而對他們的會話的其他部分使用私鑰加密(因爲對稱加密快捷,用於實際的數據加密,而利用不對稱加密的方式解決對稱加密中私鑰傳遞的不安全性,此爲對稱和不對稱加密結合的加密方式)。
公鑰加密具備更大的密鑰空間(或密鑰的可能值範圍),所以不大容易受到對每一個可能密鑰都進行嘗試的窮舉攻擊。因爲沒必要保護公鑰,所以它易於分發。公鑰算法可用於建立數字簽名以驗證數據發送方的身份。可是,公鑰算法很是慢(與私鑰算法相比),不適合用來加密大量數據。公鑰算法僅對傳輸不多量的數據有用。公鑰加密一般用於加密一個私鑰算法將要使用的密鑰和 IV。傳輸密鑰和 IV 後,會話的其他部分將使用私鑰加密。
RSA系統是諸多此類算法中最著名、最多使用的一種。RSA公開密鑰密碼系統是由R.Rivest、A.Shamir和L.Adleman俊教授於1977年提出的。RSA的取名就是來自於這三位發明者的姓的第一個字母RSA(Rivest-Shamir-Adleman)算法是基於大數不可能被質因數分解假設的公鑰體系。簡單地說就是找兩個很大的質數。一個對外公開的爲「公鑰」(Prblic key) ,另外一個不告訴任何人,稱爲"私鑰」(Private key)。這兩個密鑰是互補的,也就是說用公鑰加密的密文能夠用私鑰解密,反過來也同樣。
公鑰的傳輸:要啓動安全通信,通訊兩端必須首先獲得相同的共享密鑰(主密鑰),但共享密鑰不能經過網絡相互發送,由於這種作法極易泄密。Diffie-Hellman算法是用於密鑰交換的最先最安全的算法之一。
RSA算法:RSA算法是基於大數難於分解的原理。不但能夠用於認證,也能夠用於密鑰傳輸,例子能夠參考RSAUtil.java文件。那麼用戶A和B如何利用RSA算法來傳輸密鑰呢?
1:A產生一個密鑰K,用B的公鑰加密K,而後將獲得的密文發送給B。
2:B用本身的私鑰解密收到的密鑰,就能夠獲得密鑰。
DH算法:DH算法的出現就是用來進行密鑰傳輸的。DH算法是基於離散對數實現的。DH算法的基本工做原理是:通訊雙方公開或半公開交換一些準備用來生成密鑰的"材料數據",在彼此交換過密鑰生成"材料"後,兩端能夠各自生成出徹底同樣的共享密鑰。在任什麼時候候,雙方都毫不交換真正的密鑰。通訊雙方交換的密鑰生成"材料",長度不等,"材料"長度越長,所生成的密鑰強度也就越高,密鑰破譯就越困難。除進行密鑰交換外,IPSec還使用DH算法生成全部其餘加密密鑰。
在通訊前,用戶A和B雙方約定2個大整數n和g,其中1<g<n,這兩個整數能夠公開
1) A隨機產生一個大整數a,而後計算Ka=ga mod n(a須要保密)
2) B隨機產生一個大整數b,而後計算Kb=gb mod n(b須要保密)
3) A把Ka發送給B,B把Kb發送給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上加密算法的實現用例」一文中的末一個例子,過程以下:假設A和B通訊(JCE中只支持DH算法做爲傳遞私鑰的算法)
A利用KeyPairGenerator類生成一個鑰對類KeyPair並可經過generatePublic方法產生公鑰PublicKey(puA)和getPrivate方法私鑰PrivateKey(prA)。A把puA發給B。B用類X509EncodedKeySpec解碼,而後利用KeyFactory類生成puA,轉換成DHPublicKey類利用其getParams方法取得參數類DHParameterSpec,B再利用此參數類,經過KeyPairGenerator類的initialize方法生成KeyPairGenerator實例從而用generateKeyPair方法生成B的KeyPair。進而B生成puB和prB,B把puB發給A。A利用puB和prA做爲參數,分別調用KeyAgreement類的init和doPhase方法初始化,而後用generateSecret方法生成各自的DES的密鑰SecretKey,此密鑰是相同的,便可用Cipher類進行加解密了。
.NET 經過抽象基類 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非對稱(公鑰/私鑰)加密算法:
• DSACryptoServiceProvider
• RSACryptoServiceProvider
數字簽名
公鑰算法還可用於構成數字簽名。數字簽名驗證發送方的身份(若是您信任發送方的公鑰)並幫助保護數據的完整性。
爲了使用公鑰加密對消息進行數字簽名,小紅首先將哈希算法應用於該消息以建立消息摘要。該消息摘要是數據的緊湊且惟一的表示形式。而後,小紅用她的私鑰加密該消息摘要以建立她的我的簽名。在收到消息和簽名時,小明使用小紅的公鑰解密簽名以恢復消息摘要,並使用與小紅所使用的相同的哈希算法來散列消息。若是小明計算的消息摘要與從小紅那裏收到的消息摘要徹底一致,小明就能夠肯定該消息來自私鑰的持有人,而且數據未被修改過。若是小明相信小紅是私鑰的持有人,則他知道該消息來自小紅。
請注意,因爲發送方的公鑰爲你們所周知,而且它一般包含在數字簽名格式中,所以任何人均可以驗證簽名。此方法不保守消息的機密;若要使消息保密,還必須對消息進行加密。
.NET Framework 提供如下實現數字簽名算法的類:
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.
哈希值
哈希算法將任意長度的二進制值映射爲固定長度的較小二進制值,這個小的二進制值稱爲哈希值。哈希值是一段數據惟一且極其緊湊的數值表示形式。若是散列一段明文並且哪怕只更改該段落的一個字母,隨後的哈希計算都將產生不一樣的值。要找到散列爲同一個值的兩個不一樣的輸入,在計算上是不可能的。
消息身份驗證代碼 (MAC) 哈希函數一般與數字簽名一塊兒用於對數據進行簽名,而消息檢測代碼 (MDC) 哈希函數則用於數據完整性。
雙方(小紅和小明)可按下面的方式使用哈希函數來確保數據的完整性。若是小紅對小明編寫一條消息並建立該消息的哈希,則小明能夠在稍後散列該消息並將他的哈希與原始哈希進行比較。若是兩個哈希值相同,則該消息沒有被更改;若是值不相同,則該消息在小紅編寫它以後已被更改。爲了使此係統發揮做用,小紅必須對除小明外的全部人保密原始的哈希值。
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 提供如下實現數字簽名算法的類:
HMACSHA1
MACTripleDES
MD5CryptoServiceProvider
SHA1Managed
SHA256Managed
SHA384Managed
SHA512Managed
摘要函數(MD二、MD4和MD5,還有SHA1等算法(產生一個20字節的二進制數組))
摘要是一種防止改動的方法,其中用到的函數叫摘要函數。這些函數的輸入能夠是任意大小的消息,而輸出是一個固定長度的摘要。摘要有這樣一個性質,若是改變了輸入消息中的任何東西,甚至只有一位,輸出的摘要將會發生不可預測的改變,也就是說輸入消息的每一位對輸出摘要都有影響。總之,摘要算法從給定的文本塊中產生一個數字簽名(fingerprint或message digest),數字簽名能夠用於防止有人從一個簽名上獲取文本信息或改變文本信息內容。摘要算法的數字簽名原理在不少加密算法中都被使用,如S/KEY和PGP(pretty good privacy)。
如今流行的摘要函數有MD4和MD5。MD2摘要算法的設計是出於下面的考慮:利用32位RISC結構來最大其吞吐量,而不須要大量的替換表(substitution table)。MD4算法將消息的給予對長度做爲輸入,產生一個128位的"指紋"或"消息化"。要產生兩個具備相同消息化的文字塊或者產生任何具備預先給定"指紋"的消息,都被認爲在計算上是不可能的。MD5摘要算法是個數據認證標準。MD5的設計思想是要找出速度更快但更不安全的MD4中潛在的不安全,MD5的設計者經過使MD5在計算上慢下來,以及對這些計算作了一些基礎性的改動來解決這個問題。MD5在RFC1321中給出文檔描述,是MD4算法的一個擴展。美國國家標準技術研究所的SHA1和麻省理工學院Ronald Rivest提出的MD5是爲表明。HMAC-MD5算法(消息摘要5)基於RFC1321。MD5對MD4作了改進,計算速度比MD4稍慢,但安全性能獲得了進一步改善。MD5在計算中使用了64個32位常數,最終生成一個128位的完整性檢查和。
HMAC-SHA算法:安全Hash算法定義在NIST FIPS 180-1,其算法以MD5爲原型。SHA在計算中使用了79個32位常數,最終產生一個160位完整性檢查和。SHA檢查和長度比MD5更長,所以安全性也更高。
隨機數生成
隨機數生成是許多加密操做不可分割的組成部分。例如,加密密鑰須要儘量地隨機,以便使生成的密鑰很難再現。加密隨機數生成器必須生成沒法以計算方法推算出(低於 p < .05 的機率)的輸出;即,任何推算下一個輸出位的方法不得比隨機猜想具備更高的成功機率。.NET Framework 中的類使用隨機數生成器生成加密密鑰。
在商務領域的應用
許多人都知道NETSCAPE公司是Internet商業中領先技術的提供者,該公司提供了一種基於RSA和保密密鑰的應用於因特網的技術,被稱爲安全插座層(Secure Sockets Layer,SSL)。
也許不少人知道Socket,它是一個編程界面,並不提供任何安全措施,而SSL不但提供編程界面,並且向上提供一種安全的服務,SSL3.0如今已經應用到了服務器和瀏覽器上,SSL2.0則只能應用於服務器端。
SSL3.0用一種電子證書(electric certificate)來實行身份進行驗證後,雙方就能夠用保密密鑰進行安全的會話了。它同時使用「對稱」和「非對稱」加密方法,在客戶與電子商務的服務器進行溝通的過程當中,客戶會產生一個Session Key,而後客戶用服務器端的公鑰將Session Key進行加密,再傳給服務器端,在雙方都知道Session Key後,傳輸的數據都是以Session Key進行加密與解密的,但服務器端發給用戶的公鑰必需先向有關發證機關申請,以獲得公證。
基於SSL3.0提供的安全保障,用戶就能夠自由訂購商品而且給出信用卡號了,也能夠在網上和合做夥伴交流商業信息而且讓供應商把訂單和收貨單從網上發過來,這樣能夠節省大量的紙張,爲公司節省大量的電話、傳真費用。在過去,電子信息交換(Electric Data Interchange,EDI)、信息交易(information transaction)和金融交易(financial transaction)都是在專用網絡上完成的,使用專用網的費用大大高於互聯網。正是這樣巨大的誘惑,才令人們開始發展因特網上的電子商務,但不要忘記數據加密。
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.
經常使用算法比較
數據加密標準(DES)是一個古老的對稱密鑰加密算法,目前已經再也不使用。它不是一個很安全的算法。
三重DES(Triple-DES)仍然是很安全的,可是也只是在別無他法的狀況下的一個較好的選擇。顯然高級加密標準(AES)是一個更好的加密算法,NIST用AES代替Triple-DES做爲他們的標準(下面有更詳細的討論)。其餘較好的算法包括另外兩個AES的變種算法Twofish和Serpent-也稱爲CAST-128,它是效率和安全的完美結合。這幾個算法不只比DES更安全,並且也比DES的速度更快。爲何要使用一些又慢又不安全的算法呢
SHA1是一個哈希函數,而不是一個加密函數。做爲一個哈希函數,SHA1仍是至關優秀的,可是還須要幾年的發展才能用做加密算法。若是你正在設計一個新系統,那麼謹記你可能會在若干年後用SHA1代替目前的算法。我再重複一遍:只是可能。
RSA是一個公開密鑰加密算法。RSA的密鑰長度通常爲2048-4096位。若是你如今的系統使用的是1024位的公開密鑰,也沒有必要擔憂,可是你能夠加長密鑰長度來達到更好的加密效果。
高級加密標準(AES)是一個用來代替數據加密標準(DES)的算法。目前使用的通常爲128,196和256位密鑰,這三種密鑰都是至關安全的。並且美國政府也是這樣認爲的。他們批准將128位密鑰的AES算法用於通常數據加密,196位和256位密鑰的AES算法用於祕密數據和絕密數據的加密。
DESX是DES的一個改進版本。DESX的原理是利用一個隨機的二進制數與加密前的數據以及解密後的數據異或。雖然也有人批評這種算法,可是與DES相比DESX確實更安全,不過DESX在許多狀況下並不適用。我曾經處理過一個硬件支持DES的系統,因爲有些環節不能容忍三重DES的慢速,咱們在這些地方使用了DESX來代替DES。然而,這是一個很是特殊的狀況。若是你須要使用DESX,理由顯而易見(可能和我不得不使用DESX的緣由相似)。但我建議你使用AES或者上面我提到的一些算法。
RC4是一種經常使用於SSL鏈接的數據流加密算法。它已經出現不少年了,並且有不少已知和可能的缺陷,所以在一些新的工程中不要使用它。若是你目前正在使用它並且能夠輕易的卸載它,那麼狀況也不是很壞。不過,我懷疑若是你如今正在使用它,你不可能輕易的卸載它。若是不能將它從系統中輕易的卸載,那麼你仍是考慮從此怎樣升級它,可是不要感到很驚慌。我不會拒絕在一個使用RC4算法來加密SSL鏈接的網站購買東西,可是若是我如今要新建一個系統,那麼我會考慮使用其餘的算法,例如:AES。
對於下面兩個算法MD5-RSA和SHA1-DSA,他們是用於數字簽名的。可是不要使用MD5,由於它有不少缺陷。不少年前你們就知道MD5中存在
漏洞,不過直到今年夏天才
破解出來。咱們能夠將SHA1和RSA或DSA配合在一塊兒使用,目前DSA的密鑰位數高達1024位,這個密鑰位數已經足夠長了,所以不須要擔憂安全問題。然而,若是NIST實現了更長的密鑰位數固然更好。
X.509證書是一個數據結構,經常使用於規定比特和字節的順序,它自己不是一個密碼系統。它一般包含一個RSA密鑰,也可能包含一個DSA密鑰。可是X.509證書內部以及證書自己並非
加密技術。