Java加密與解密的藝術(shù)_第1頁(yè)
Java加密與解密的藝術(shù)_第2頁(yè)
Java加密與解密的藝術(shù)_第3頁(yè)
Java加密與解密的藝術(shù)_第4頁(yè)
Java加密與解密的藝術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩89頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2016Java加密與解密的藝術(shù)學(xué)習(xí)前的準(zhǔn)備各章內(nèi)容的掌握要求第一章企業(yè)應(yīng)用平安第二章密碼學(xué)簡(jiǎn)介第三章Java密碼學(xué)編程第四章更多密碼效勞的應(yīng)用實(shí)踐篇綜合應(yīng)用篇復(fù)習(xí)篇學(xué)習(xí)前的準(zhǔn)備學(xué)習(xí)前的準(zhǔn)備:相關(guān)包下載:運(yùn)行環(huán)境配置:eclipse、jre/jdk,環(huán)境變量設(shè)置測(cè)試組件包Junit;編碼組件包CommonsCodec;支持base64、hex等編碼的包JavaAPI下載或鏈接

書(shū)中的源碼文件各章內(nèi)容掌握要求第1章了解第2章清晰密碼算法的分類:對(duì)稱密碼、非對(duì)稱密碼、散列函數(shù)、數(shù)字簽名算法的區(qū)別和應(yīng)用;重點(diǎn)理解分組密碼中分組模式及補(bǔ)丁的概念;第3章理解java平臺(tái)的平安提供者體系結(jié)構(gòu);結(jié)合第4章知道如何增加新的平安提供者;對(duì)java.security包、javax.crypto包里面的一些類有印象;第6章了解Base64編碼,看懂代碼實(shí)例第7章—第9章看懂代碼實(shí)例,能夠清楚編寫(xiě)相應(yīng)密碼算法的代碼的流程:對(duì)稱加密、非對(duì)稱加密、數(shù)字簽名、Hash運(yùn)算;第10章了解證書(shū)及其在代碼中的應(yīng)用;第11章了解使用JSSE實(shí)現(xiàn)SSL通信的代碼;平安與密碼學(xué)第一章企業(yè)應(yīng)用平安應(yīng)用平安問(wèn)題存儲(chǔ)問(wèn)題通信問(wèn)題網(wǎng)上交易問(wèn)題網(wǎng)絡(luò)效勞交互問(wèn)題移動(dòng)應(yīng)用效勞問(wèn)題內(nèi)部人為問(wèn)題解決平安問(wèn)題—平安技術(shù)目標(biāo)保密性〔Confidentiality〕完整性〔Integrity〕可用性〔Availability〕可靠性〔Reliability〕抗否認(rèn)性〔Non-Repudiation〕可控性Controllability可審查性:Auditability認(rèn)證Authentication訪問(wèn)控制AccessControll--參考《密碼學(xué)》解決平安問(wèn)題—OSI平安體系結(jié)構(gòu)解決平安問(wèn)題—OSI平安效勞的保障機(jī)制解決平安問(wèn)題—OSI平安效勞的保障機(jī)制認(rèn)證效勞:用戶認(rèn)證機(jī)制:用戶名口令、其他認(rèn)證:kerberos認(rèn)證;數(shù)字簽名機(jī)制;訪問(wèn)控制效勞:根據(jù)不同用戶類型訪問(wèn)權(quán)B限不同,進(jìn)行訪問(wèn)控制,典型應(yīng)用:RBAC,基于角色的訪問(wèn)控制;路由訪問(wèn)控制機(jī)制;數(shù)據(jù)保密性效勞:加密機(jī)制,業(yè)務(wù)流填充機(jī)制〔傳輸過(guò)程中參加隨機(jī)數(shù)來(lái)混淆原數(shù)據(jù)〕數(shù)據(jù)完整性效勞:?jiǎn)蜗蛏⒘泻瘮?shù)〔消息摘要算法〕抗否認(rèn)性效勞:公證機(jī)制,第三方公證機(jī)構(gòu)解決平安問(wèn)題—TCP/IP平安體系結(jié)構(gòu)解決平安問(wèn)題—TCP/IP平安體系結(jié)構(gòu)網(wǎng)絡(luò)接口層平安:一般采用在兩端架設(shè)加密機(jī);網(wǎng)絡(luò)層平安:IPSec協(xié)議〔Protocol〕,通過(guò)硬件實(shí)現(xiàn),VPN傳輸層平安:SSL(SecuritySocketLayer)TLS(TransportLayerSecurity)WTLS(WirelessTransportLayerSecurity)應(yīng)用層平安:HTTPS(HypertextTransferProtocoloverSecureSocketLayer)=SSL/TLS+HTTP解決平安問(wèn)題—密碼學(xué)密碼學(xué)在平安方面的應(yīng)用加解密數(shù)字簽名數(shù)字摘要數(shù)字信封數(shù)字證書(shū)SSL、TLS協(xié)議HTTPS協(xié)議密碼學(xué)與JAVAJCA、JCE、JSSE〔JAAS〕Keytool工具、JarSigner完成代碼簽名;全面部署應(yīng)用平安防火墻VPN入侵檢測(cè)病毒防護(hù)訪問(wèn)控制:用戶認(rèn)證〔數(shù)字證書(shū)〕、權(quán)限管理;數(shù)據(jù)加密:敏感數(shù)據(jù)的通信加密〔平安協(xié)議〕及存儲(chǔ)加密;完整性保證:數(shù)字摘要〔哈希鏈〕;開(kāi)展、定義、術(shù)語(yǔ)及分類第二章密碼學(xué)簡(jiǎn)介對(duì)密碼學(xué)的開(kāi)展、定義、術(shù)語(yǔ)及分類的哪些內(nèi)容感興趣?對(duì)哪些知識(shí)有所了解,哪些不了解?考慮以后的開(kāi)展以后會(huì)用到哪些?密碼學(xué)相關(guān)定義-1密碼學(xué):研究保密通信和信息保密的學(xué)科,包括信息保密傳輸和信息加密存儲(chǔ)等。密碼學(xué)包括研究信息編碼和隱藏的密碼編碼學(xué)〔Cryptography〕和研究加密信息破密或消息偽造的密碼分析學(xué)〔Cryptanalyst〕兩個(gè)分支。密碼體制〔CryptographicSystem〕:密碼學(xué)相關(guān)定義-2明文(Plaintext):待加密的信息;密文(Ciphertext):加密后的信息;加密(Encryption):將明文轉(zhuǎn)換為密文的過(guò)程;加密算法(EncryptionAlgorithm):將明文轉(zhuǎn)換為密文的算法;加密密鑰(EncryptionKey):進(jìn)行加密操作時(shí)用的密鑰;解密(Decryption):將密文轉(zhuǎn)換為明文的過(guò)程;解密算法(DecryptionAlgorithm):將密文轉(zhuǎn)換為明文的算法;解密密鑰(DecryptionKey):進(jìn)行解密操作時(shí)用的密鑰;密碼分析(Cryptanalysis):通過(guò)密文推斷明文或密鑰的過(guò)程;主動(dòng)攻擊(ActiveAttack):攻擊者非法入侵密碼系統(tǒng)進(jìn)行破壞;被動(dòng)攻擊(PassiveAttack):攻擊者截獲密文并對(duì)密文進(jìn)行分析;密碼學(xué)的開(kāi)展史—手工加密階段手工加密階段:公元前1000年,周朝姜子牙:陰符和陰書(shū);希臘的棋盤密碼hello->2315

3131

34

羅馬大帝凱撒使用凱撒密碼加密:c≡m+k

mod

26m:1-25分別對(duì)應(yīng)a-yz為0k:為整數(shù)123456789101112131415161718abcdefghIjklmnopqr192021222324250Stuvwxyz例:k=5時(shí)hello->mjqqt其他加密方式密碼學(xué)的開(kāi)展史—機(jī)械加密階段第一次世界大戰(zhàn)期間:以德國(guó)海軍的無(wú)線電密碼為代表,屢次被英國(guó)情報(bào)部門破譯;第二次世界大戰(zhàn)期間:轉(zhuǎn)輪機(jī)最具代表性,以Enigma創(chuàng)造的轉(zhuǎn)輪機(jī)復(fù)雜度最高。最終被英國(guó)數(shù)學(xué)家阿蘭·圖靈破解;密碼學(xué)的開(kāi)展史—計(jì)算機(jī)加密階段計(jì)算機(jī)的開(kāi)展,使得更為復(fù)雜的加密算法設(shè)計(jì)成為可能1949年信息論始祖Shannon發(fā)表了《保密系統(tǒng)的通信理論》,密碼學(xué)由一門藝術(shù)變?yōu)橐婚T真正的科學(xué);1976年密碼學(xué)家Diffie和Hellman發(fā)表了《密碼學(xué)的新方向》,提出了密鑰DH密鑰交換算法,解決了密鑰管理問(wèn)題,公鑰密碼學(xué)出現(xiàn);1977年,美國(guó)加密標(biāo)準(zhǔn)DES的公布,第一個(gè)完善的公鑰密碼體制RSA的提出;1997年美國(guó)征集新的國(guó)家密碼標(biāo)準(zhǔn)AES,比利時(shí)密碼學(xué)家提出的Rijndael算法入選;量子計(jì)算機(jī)和量子密碼的出現(xiàn);密碼學(xué)分類按時(shí)間劃分:古典密碼學(xué):以字符為加密單元;現(xiàn)代密碼學(xué):以信息塊為加密單元;按算法類型劃分:受限制算法:保密性基于對(duì)算法的保密;基于密鑰的算法:保密性基于對(duì)密鑰的保密按密碼體制類型劃分:對(duì)稱密碼體制:加密和解密使用同一個(gè)密鑰非對(duì)稱密碼體制:加密和解密使用不同密鑰按明文的處理方法:流密碼:將明文逐位進(jìn)行加密,逐位進(jìn)行解密;分組密碼:明文按照固定長(zhǎng)度的組進(jìn)行加密,密文分組進(jìn)行解密,分組長(zhǎng)度作為分組密碼算法的參數(shù);古典密碼從古代到19世紀(jì)末應(yīng)用的密碼,核心技術(shù)是置換和替換,現(xiàn)代密碼很多仍然是代替和換位的組合,只不過(guò)更加復(fù)雜;置換密碼〔Permutation/TtranspositionCipher〕:明文的字母保持不變,但位置順序被打亂了;替換〔代〕密碼〔SubstitutionCipher〕:將明文中的字符替代成其他字符。簡(jiǎn)單替換〔單字符替換〕:從明文字母表到密文字母表一一映射的過(guò)程;同音替換:?jiǎn)蝹€(gè)字符明文可以映射成密文的幾個(gè)字符之一;多表替換:明文和密文之間的映射還取決于它在上下文的位置;多字母替換:明文中的字符被成組加密;對(duì)稱密碼-分組密碼定義:古典密碼的延續(xù),加密解密過(guò)程使用同一個(gè)共享密鑰;密鑰也成為秘密密鑰〔SecretKey〕;常用算法:DES〔64〕、3DES(也表示為DESede)、AES、IDEA〔國(guó)際數(shù)據(jù)加密算法,用于PGP協(xié)議中〕、Blowfish應(yīng)用場(chǎng)所:1.需要通信前商定該密鑰,并妥善保存該密碼;因此一般是在通信過(guò)程中產(chǎn)生臨時(shí)會(huì)話密鑰,會(huì)話結(jié)束后就不存在了;2.計(jì)算速度快,因此用于大量信息的加密,PGP協(xié)議用于加密郵件和文件,使用IDEA算法實(shí)現(xiàn);對(duì)稱密碼-流密碼流〔序列〕密碼:將明文按字符〔字節(jié)〕逐位進(jìn)行加密,解密也是對(duì)明文逐位進(jìn)行解密;常用算法:RC2、RC4、RC5應(yīng)用場(chǎng)所:軍事、外交等部門;對(duì)稱密碼--分組密碼工作模式1.分組密碼:將明文和密文分成固定長(zhǎng)度的組進(jìn)行運(yùn)算的密碼;分組長(zhǎng)度為算法的一個(gè)輸入?yún)?shù);2.分組方式:ECB(ElectronicCodeBook):電子密碼本模式mi<->ciCBC(CipherBlockChaining):密文分組鏈接模式mi異或ci-1作為輸入加密CFB(CipherFeedBack):密文反響模式OFB(OutputFeedBack):輸出反響模式CTR(Counter):計(jì)數(shù)器模式3.打補(bǔ)丁方式:分組密碼有時(shí)會(huì)出現(xiàn)最后一組的長(zhǎng)度小于分組長(zhǎng)度的時(shí)候,如何補(bǔ)足長(zhǎng)度,這時(shí)需要用到打補(bǔ)丁的方式:NoPadding,ISO10126Padding,OAEPPadding,PKCS1Padding,PKCS5Padding,SSL3Padding;4.分組密碼長(zhǎng)度:DES:64;3DES:168;AES:128、192、256;IDEA:64、128;Blowfish:64;

模式1.ECB

電子密碼本模式27模式2.CBC密文分組鏈接28CBC加密CBC解密模式3.CFB密文反響29CFB加密CFB解密模式4.OFB輸出反響30OFB加密OFB解密模式5.CRT計(jì)數(shù)模式31非對(duì)稱密碼體制—產(chǎn)生背景產(chǎn)生背景:密鑰的更新和存儲(chǔ)不能解決:對(duì)稱〔分組〕密碼體制中,任意兩個(gè)通信雙方之間需要共享一對(duì)互不相同的密鑰,N個(gè)用戶,需要n(n-1)/2個(gè)密鑰,每個(gè)用戶需要保存n-1個(gè)密鑰;通信對(duì)方需要事先知道對(duì)稱加密密鑰對(duì)于臨時(shí)通信實(shí)體,無(wú)法方便的傳遞密鑰無(wú)法實(shí)現(xiàn)真正的數(shù)字簽名Diffe和Hellman在1976年發(fā)表了《密碼學(xué)的新方向》論文,特別研究了密鑰分發(fā)問(wèn)題,提出了DH密鑰協(xié)商方案,該論文提出了公鑰密碼學(xué)思想1977年,MIT的RonRivest,AdiShamir和LenAdleman提出了可以真正用于加密數(shù)據(jù)的公鑰算法,即RSA算法1985年,出現(xiàn)了現(xiàn)在流行的基于橢圓曲線構(gòu)造的ECC算法非對(duì)稱密碼體制—構(gòu)造原理公鑰密碼體制的建立是基于目前難解的數(shù)學(xué)問(wèn)題,主要有大整數(shù)分解難題(RSA)離散對(duì)數(shù)問(wèn)題(DH、DSA)橢圓曲線〔EllipticCurve〕上點(diǎn)域的離散對(duì)數(shù)問(wèn)題(ECC)非對(duì)稱密碼體制—應(yīng)用場(chǎng)所應(yīng)用場(chǎng)所:加密:RSA,ECIES數(shù)字簽名:MD5withRSA;SHA256withRSA;SHA256withDSA;SHA256withECDSA;常用于身份認(rèn)證〔數(shù)字證書(shū)、數(shù)字簽名驗(yàn)證〕;SSL通信:和對(duì)稱密碼一起進(jìn)行保密通信,先認(rèn)證雙方身份,然后協(xié)商會(huì)話密鑰,后期的通信信息采用會(huì)話密鑰進(jìn)行加密;數(shù)字信封:使用對(duì)稱密鑰k加密消息m的密文c,然后使用對(duì)方公鑰pk加密對(duì)稱密鑰k得加密后的密鑰k1,將密文c和加密密鑰k1一起發(fā)送給對(duì)方;其他散列函數(shù)散列函數(shù)〔哈希函數(shù)、消息摘要函數(shù)、單向函數(shù)、雜湊函數(shù)〕:消息長(zhǎng)度不受限制,散列值是短的固定長(zhǎng)度的字符串;給定消息,計(jì)算散列值是容易的;散列函數(shù)的運(yùn)算不可逆;抗弱碰撞性:一個(gè)消息和散列值,找到另一個(gè)具有相同散列值的消息是不可能的;抗強(qiáng)碰撞性:任意兩個(gè)不同消息的散列值一定不同,MD(消息摘要算法)、SHA〔平安散列算法〕及Mac〔消息認(rèn)證碼算法〕國(guó)內(nèi)商用密碼標(biāo)準(zhǔn)公鑰根底設(shè)施(PKIPublicKeyInfrastructure)是一種遵循標(biāo)準(zhǔn)的利用公鑰加密技術(shù)為電子商務(wù)的開(kāi)展提供一套平安根底平臺(tái)的技術(shù)和標(biāo)準(zhǔn);定義了一個(gè)基于X.509的,用于創(chuàng)立、分配和撤回證書(shū)的模型;定義的內(nèi)容:X.509格式的證書(shū)〔X.509V3〕和證書(shū)廢止列表CRL〔X.509V2〕;CA操作協(xié)議;CA管理協(xié)議;CA政策制定;系統(tǒng)的組成:認(rèn)證中心CA、證書(shū)庫(kù)、密鑰備份及恢復(fù)系統(tǒng)、證書(shū)作廢系統(tǒng)、應(yīng)用程序接口API;密碼的破解56位DES:1999年用22小時(shí)15分鐘宣告破解56位的DES密鑰散列函數(shù):2004年,王小云宣告破解MD5,HAVAL-128,MD4和RIPEMD2005年,王小云宣告破解SHA-1,從理論上說(shuō)明了數(shù)字簽名可以偽造2008年荷蘭科學(xué)家成功對(duì)兩個(gè)不同的可執(zhí)行文件進(jìn)行了MD5碰撞,同年12月一組科研人員通過(guò)MD5碰撞生成了偽造的SSL證書(shū)SSL/TLS協(xié)議:基于CBC模式加密和RC4流加密都出現(xiàn)了漏洞;第三章Java密碼學(xué)編程Java平安效勞組件JCA(JavaCryptographyArchitecture)Java加密體系結(jié)構(gòu)提供數(shù)字簽名、消息摘要、證書(shū)、密鑰對(duì)生成器等密碼效勞API,對(duì)應(yīng)java.security包及其子包中密碼相關(guān)的接口和類;JCE(JavaCryptographyExtension)Java加密擴(kuò)展加密、密鑰管理、密鑰交換協(xié)議等密碼效勞API,對(duì)應(yīng)javax.crypto及其子包中的接口和類;〔參見(jiàn)API〕JSSE(JavaSecureSocketsExtension)Java平安套接字?jǐn)U展包提供基于SSL(SecureSocketLayer)的加密功能;對(duì)應(yīng)包中的接口和類;〔參見(jiàn)API〕JAAS(JavaAuthenticationandAuthorization)Java認(rèn)證授權(quán)效勞:提供統(tǒng)一認(rèn)證授權(quán)效勞,單點(diǎn)登錄功能;對(duì)應(yīng)的接口和類在javax.security.auth包中定義;〔參見(jiàn)API〕JCAJCE密碼效勞APIJCA最早出現(xiàn)在JDK1.1中,當(dāng)時(shí)只有有限的功能,包括為一些為數(shù)字簽名和消息摘要而設(shè)計(jì)的API。以支持可信任簽名代碼模式。Java2SDK首次發(fā)布時(shí),JCA在邏輯上既包括定義在Java2SDK中的API,也包含JCE1.2中的密碼API。但當(dāng)時(shí)JCE是一個(gè)可選包,它提供加密,密鑰交換、MAC等與加密相關(guān)的密碼API。為遵循美國(guó)密碼出口法,1.2,1.3中JCE作為擴(kuò)展包單獨(dú)發(fā)行,從1.4開(kāi)始就被集成到Java2SDK中了??蚣芙Y(jié)構(gòu):為了訪問(wèn)和開(kāi)發(fā)Java平臺(tái)的密碼學(xué)功能,Java2SDK著重將JCA、JCE擴(kuò)展為框架結(jié)構(gòu)。除了密碼相關(guān)的API,還包括一些提供者結(jié)構(gòu),以允許多種可相互作用的密碼學(xué)實(shí)現(xiàn),還有相關(guān)的標(biāo)準(zhǔn)和說(shuō)明。JCA、JCE:定義了連接應(yīng)用和實(shí)際算法實(shí)現(xiàn)程序的接口,無(wú)任何具體算法實(shí)現(xiàn);具體算法實(shí)現(xiàn)打包成Provider,動(dòng)態(tài)加載到JRE中。JCA、JCE設(shè)計(jì)原那么JCA設(shè)計(jì)遵循的原那么算法的獨(dú)立性和可擴(kuò)展性;實(shí)現(xiàn)的獨(dú)立性和互操作性;算法獨(dú)立性:通過(guò)定義密碼學(xué)“引擎〔engine〕”或效勞的類型,以及定義相應(yīng)的引擎類,可以獲得算法的獨(dú)立性。算法的可擴(kuò)展性:基于提供者結(jié)構(gòu)可以獲得算法的可擴(kuò)展性。實(shí)現(xiàn)的獨(dú)立性:基于提供者結(jié)構(gòu)可以獲得實(shí)現(xiàn)的獨(dú)立性。實(shí)現(xiàn)的互操作性:API設(shè)計(jì)的通用性以及基于提供者的結(jié)構(gòu)可以獲得實(shí)現(xiàn)的互操作性。加密效勞提供者CSP〔CryptographicServiceProviderCSP〕是一個(gè)或一系列程序包,它們用來(lái)實(shí)現(xiàn)一個(gè)或多個(gè)JCA密碼效勞,Bouncycastle提供的JCE包?!瞯ider.BouncyCastleProvider)JCA、JCE設(shè)計(jì)原那么--結(jié)構(gòu)圖

應(yīng)用程序APIjava.security.SecuritySignatureMessageDigestKeyPairGeneratorAlgorithmParameterGeneratorAlgorithmParametersCipherKeyAgreementKeyGeneratorSecretKeyFactoryMACSPI

密碼服務(wù)提供者CSP1密碼服務(wù)提供者CSP2密碼服務(wù)提供者CSP3JCA、JCE設(shè)計(jì)原那么—引擎和算法引擎:JCA、JCE的API中定義的操作;例如加密操作的API由Cipher類來(lái)定義,但具體的加密算法的實(shí)現(xiàn)由提供者通過(guò)SPI接口來(lái)提供;查看BC的提供者類算法:提供者要實(shí)現(xiàn)具體某個(gè)算法時(shí),需要實(shí)現(xiàn)的具體對(duì)應(yīng)SPI接口;應(yīng)用程序開(kāi)發(fā)者只需要通過(guò)指定提供者和具體算法名稱只需要調(diào)用引擎類定義的API接口,就可以完成具體的密碼效勞;JCA、JCE設(shè)計(jì)原那么-API類和SPI類一個(gè)API類會(huì)對(duì)應(yīng)多個(gè)SPI類引擎類的實(shí)例〔即API對(duì)象〕將對(duì)應(yīng)SPI類的實(shí)例〔即SPI對(duì)象〕作為一個(gè)私有域來(lái)封裝。API對(duì)象中的方法調(diào)用了對(duì)應(yīng)的SPI方法,A.x()A.y()A.z()B.engineX()B.engineY()B.engineZ()JCA、JCE設(shè)計(jì)原那么-工廠方法模式getInstance()工廠方法:用于創(chuàng)立引擎類的實(shí)例和相應(yīng)的SPI類的實(shí)例。工廠方法模式定義了一個(gè)創(chuàng)立對(duì)象的接口,但由子類決定要實(shí)例化的類是哪一個(gè)。工廠方法讓類把實(shí)例化推遲到子類;由應(yīng)用程序調(diào)用父類的工廠方法時(shí)指定使用哪個(gè)子類來(lái)實(shí)例化對(duì)象,如JCA、JCE中使用提供者和算法名稱來(lái)指定具體的子類;密碼效勞提供者包的使用JCA中如何安裝、注冊(cè)、使用提供者包。安裝:在Classpath所定義的路徑中放置提供者包或者將提供者包放到lib\ext\下。注冊(cè):在java.security文件中設(shè)置:vider.i=masterclassnamemasterclassname對(duì)應(yīng)了提供者包中提供者類的全名稱〔包名+類名〕通過(guò)調(diào)用10.4節(jié)中介紹的類的addProvider方法或者insertProviderAt方法來(lái)注冊(cè)使用:在程序中的getInstance方法中通過(guò)傳遞參數(shù)的形式,使用指定的提供者,如果不指定提供者,就會(huì)按照java.security文件中定義的優(yōu)先級(jí)來(lái)查找當(dāng)前算法在哪個(gè)提供者包中有提供,只要找到一個(gè)對(duì)應(yīng)的提供者包內(nèi)有此算法的實(shí)現(xiàn)就返回。如何成為密碼效勞提供者如何作為一個(gè)提供者為JCA提供某個(gè)或多個(gè)密碼效勞對(duì)應(yīng)的密碼算法實(shí)現(xiàn)定義一個(gè)或多個(gè)對(duì)應(yīng)SPI的子類,實(shí)現(xiàn)其中的engine方法。定義一個(gè)Provider類。安裝:將自己提供的SPI子類打包,放到classpath指定的路徑中或放到擴(kuò)展路徑中注冊(cè):在密碼效勞程序中就可以使用此提供者提供的算法實(shí)現(xiàn)了。JCA主要類和接口Provider類Security類:管理提供者M(jìn)essageDigest類:DigestInputStream類:DigestOutputStream類Key接口AlgorithmParameters類AlgorithmParameterGenerator類KeyPair類KeyPairGenerator類KeyFactory類SecureRandom類Signature類SignedObject類TimeStap類CodeSigner類KeyStore類JCE主要類和接口Mac類KeyGenerator類KeyAgreement類SecretKeyFactory類Cipher類CipherInputStream類CipherOutputStream類SealedObject類Spec包KeySpecAlgorithmParameterSpecEncodedKeySpecX509EncodedKeySpec:X.509標(biāo)準(zhǔn)公鑰編碼標(biāo)準(zhǔn)PKCS8EncodedKeySpec:PKCS8標(biāo)準(zhǔn)私鑰編碼標(biāo)準(zhǔn)SecretKeySpec類DESKeySpec類及DESedeKeySpec類證書(shū)相關(guān)的類Certificate類CertificateFactory類X509Certificate類CRL類X509CRLEntry類X509CRL類CertPath類JSSEAPIKeyManagerFactory類:管理密鑰TrustManagerFactory類:管理信任材料SSLContext類:平安上下文HttpsURLConnection類;SSLSession接口:保持SSL協(xié)議網(wǎng)絡(luò)會(huì)話狀態(tài)SSLSocketFactory類:創(chuàng)立SSLSocket對(duì)象;SSLSocket類:表示SSL套接字的類;SSLServerSocketFactory:創(chuàng)立SSLServerSocket對(duì)象SSLServerSocket:表示效勞器端的SSLSocket;BouncyCastle和CommonsCodec第四章更多密碼效勞的應(yīng)用JCE受限算法的使用在JRE中部署權(quán)限文件下載將其中的兩個(gè)文件local_policy.jar和US_export_policy.jar替換到%JRE_Home%\lib\security目錄下;分清JDK和JRE運(yùn)行AES實(shí)例

BouncyCastle的應(yīng)用下載bcprov-ext-jdk15on-153.jar和bcprov-jdk15on-153.jar包,最新版本下載地址:支持的功能模塊:PKIX、OpenSSL、SMIME和OpenPGP回憶應(yīng)用新的密碼效勞提供者的方法:配置方式:security文件中配置vider.<n>=<classname>類名是全名vider.11=vider.BouncyCastleProvider;將效勞提供者jar包導(dǎo)入到j(luò)re中〔拷貝到擴(kuò)展路徑下〕調(diào)用方式在程序中使用類的addProvider方法;Security.addProvider(newBouncyCastleProvider());BouncyCastle的APIJcajce的算法提供者math中主要是ec的相關(guān)運(yùn)算asn1:對(duì)數(shù)據(jù)進(jìn)行ASN.1編碼的功能支持;X509:對(duì)X509格式數(shù)字證書(shū)的相關(guān)表示和操作的支持;ocsp:對(duì)OCSP協(xié)議的支持;util:提供了編碼轉(zhuǎn)換、輸入輸出有關(guān)工具類;crypto:除去對(duì)jca、jceBC的包結(jié)構(gòu)CommonsCodecApache旗下的開(kāi)源軟件:主要用于編碼格式的轉(zhuǎn)換:〔ch.06-2-3〕Base64、二進(jìn)制、十六進(jìn)制、字符集、URL編碼轉(zhuǎn)換等;語(yǔ)言語(yǔ)音編碼器;對(duì)jdk的消息摘要算法做了封裝;類DigestUtils實(shí)踐篇JCA、JCE,BC,Commoncdec第五章Base64編碼什么是Base64編碼?將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種編碼方式;26個(gè)小寫(xiě)英文字母和26個(gè)小寫(xiě)英文字母加0-9+/共64個(gè)字符,=為pad,所以稱Base64編碼;〔不是加解密〕為什么引入Base64編碼?最早應(yīng)用于解決網(wǎng)關(guān)只能傳輸ASCII電子郵件傳輸問(wèn)題;解決一些不可打印字符的輸出問(wèn)題;可用于在HTTP環(huán)境下傳遞較長(zhǎng)的標(biāo)識(shí)信息字符常用的編碼格式ASCIIGB2312GBKUnicodeUTF-8UTF-16Base64字符映射表

Base64編碼的實(shí)現(xiàn)原理Base64編碼實(shí)例數(shù)字證書(shū)的Base64編碼格式:每隔76個(gè)字符添加一個(gè)回車換行符;

Base64編碼的實(shí)現(xiàn)相同功能,三個(gè)提供者實(shí)現(xiàn)05-1sun.misc中的BASE64Decoder及BASE64Encoder;05-2BC提供的類;05-3CommonCodeC提供的org.apachemons.codec.binary.Base64;05-4-1UrlBase64CoderBC提供的org.bouncycastle.util.encoders.UrlBase64;+和/在url里面用-和_替代,用.作為填充符;05-4-2UrlBase64CoderCC提供的org.apachemons.codec.binary.Base64.encodeBase64URLSafe();沒(méi)有填充符;三個(gè)提供者Base64編碼的差異sun.misc:以sun和com.sun開(kāi)頭的包都是作為java和javax類庫(kù)的根底,未被文檔化,不對(duì)外公開(kāi)使用,而且很多實(shí)現(xiàn)跟平臺(tái)有關(guān),后期可能會(huì)被刪除,因此不推薦使用;后期JDK可能會(huì)實(shí)現(xiàn)Base64的API;BC:簡(jiǎn)單的根據(jù)Base64字符映射表做了編碼轉(zhuǎn)換;UrlBase64接近RFC4648(Base16,32,64)定義;CC:除了支持一般的轉(zhuǎn)換,Base64還有基于RFC2045(MIME)的實(shí)現(xiàn),UrlBase64遵照了RFC4648(Base16,32,64)的絕大局部定義;JCA、JCE的應(yīng)用見(jiàn)實(shí)例綜合應(yīng)用篇證書(shū)操作和應(yīng)用、JSSE實(shí)現(xiàn)SSL通信證書(shū)根底知識(shí)證書(shū)內(nèi)容:查看證書(shū)證書(shū)用途:證書(shū)類型:自簽名證書(shū)、CA根證書(shū);證書(shū)的使用:瀏覽器中導(dǎo)入證書(shū);證書(shū)編碼格式:CA實(shí)例查看JCA中證書(shū)相關(guān)的類Certificate類CertificateFactory類X509Certificate類CRL類X509CRLEntry類X509CRL類CertPath類應(yīng)用keytool工具管理證書(shū)和密鑰生成證書(shū)Keytool–genkeypair–keyalgRSA–keysize2048–sigalgSH1withRSA–validity36000–alias–keystorezlex.keystore(可以直接-dnameCN=,OU=,O=,L=,S=,C=CN)導(dǎo)出證書(shū)keytooL–exportcert–alias–keystorezlex.keystore–filezlex.cer–rfc查看證書(shū)Keytool–printcert–filezlex.cer生成證書(shū)申請(qǐng)請(qǐng)求Keytool–certreq–alias-keystorezlex.keystore–filezlex.csr–v導(dǎo)入證書(shū)Keytool–importcert–alias–filezlex.cer–keystorezlex.keystore證書(shū)文件操作加載密鑰庫(kù)KeyStore

APIgetInstanc(KeyStore.getDefaultType())load()由密鑰庫(kù)獲得私鑰KeyStore

getKey()由密鑰庫(kù)獲得證書(shū)KeyStoregetCertificate()由密鑰文件加載數(shù)字證書(shū)CertificateFactoryAPIgetInstance(“x.509”);generateCertificate(in);由數(shù)字證書(shū)獲得公鑰Certificate

getPublicKey();實(shí)例10-1s和ssl平安通信實(shí)現(xiàn)SSL/TLS協(xié)議記錄協(xié)議〔RecordProtocol〕:建立在TCP根底上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加解密等功能;握手協(xié)議〔HandshakeProtocol〕:建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通信雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰;SSL握手協(xié)議--協(xié)商算法1.協(xié)商算法:SSL握手協(xié)議—驗(yàn)證證書(shū)2.1客戶端驗(yàn)證效勞器證書(shū):SSL握手協(xié)議—驗(yàn)證證

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論