- Java加密與解密的藝術(第2版)
- 梁棟
- 3789字
- 2018-12-31 23:24:38
前言
為什么要寫這本書
當你在用IM與好友聊天時,當你通過B2C網(wǎng)站購物時,當你用郵件與客戶交流時,當你公司的應用服務器與合作伙伴交換商業(yè)數(shù)據(jù)時??你是否考慮過你的數(shù)據(jù)是否安全?你的隱私是否會泄露?你的銀行卡是否會被盜用?你的競爭對手是否能破解你的敏感數(shù)據(jù)?
任何一項通過網(wǎng)絡交互的數(shù)據(jù)都有可能是不安全的,而我們卻越來越依賴于網(wǎng)絡。用戶密碼、聊天消息、銀行卡號、郵件信息、商業(yè)敏感數(shù)據(jù),如果通過明文傳輸,后果不堪設想。自己的賬號被盜用、隱私成為公共話題、信用卡被人濫用、競爭對手盜用自己的數(shù)據(jù)??于是,為了確保數(shù)據(jù)不被侵犯,數(shù)據(jù)加密與解密技術應運而生,成為眾多應用中的一項核心技術。
眾所周知,Java EE是目前企業(yè)應用中使用最廣泛的語言之一,幾乎在任何一個領域都能看到Java EE的身影。隨著加密與解密算法的發(fā)展,Java加密與解密技術不斷演進,不斷提高著數(shù)據(jù)的安全性,已成為各大企業(yè)應用中一項關鍵性的技術。
很多企業(yè)應用領域的架構師都很關注加密與解密算法在應用中的使用,例如用戶密碼加密、網(wǎng)絡協(xié)議加密等。如何在名目繁多的Java加密與解密技術中選擇合適的算法進行企業(yè)級應用開發(fā),如何解決Java加密與解密技術在開發(fā)過程中遇到的各種問題,成為許多開發(fā)者,尤其是架構師關注的焦點問題。然而,國內目前還沒有哪一本書能解決這些問題。筆者因工作需要,采用Java加密與解密技術成功構建了企業(yè)級網(wǎng)銀系統(tǒng)。在開發(fā)過程中,筆者感受到了Java加密與解密技術的精妙。筆者希望把自己Java加密與解密技術運用在企業(yè)應用開發(fā)領域的經(jīng)驗和心得分享給廣大讀者,以幫助大家掌握提升企業(yè)應用的安全性的方法。
本書面向的讀者
本書主要適合于以下讀者:
(1)所有利用Java進行企業(yè)級應用開發(fā)的軟件工程師
對于企業(yè)級應用軟件工程師來講,這將是一次系統(tǒng)的密碼學之旅。本書將為您介紹密碼學理論、Java相關算法實現(xiàn)、開源組件包、數(shù)字證書與安全協(xié)議等相關內容,并配有相關實例為您提供詳盡實現(xiàn)指導,為您構建企業(yè)級安全應用提供完整的技術支持。
(2)系統(tǒng)架構師
對于系統(tǒng)架構師來講,如何使用成熟技術快速構建安全企業(yè)應用是安全工作的第一要務。
在算法方面,本書詳述了Java 7對于密碼學算法的相關實現(xiàn),針對AES算法密鑰長度受限問題給出解決辦法。同時,針對當前Java 7不支持的算法,如SHA224、ElGamal和ECDSA等,本書詳細介紹了如何使用第三方開源加密組件包Bouncy Castle進行相關算法實現(xiàn)補充,并且對Apache Commons Codec進行了詳盡的介紹。這些成熟的組件包都是構建安全企業(yè)應用必不可少的工具包。在架構方面,本書濃墨重彩地介紹了數(shù)字證書的構建、SSL/TLS協(xié)議服務搭建,并通過相關實例介紹如何構建單向/雙向認證服務。
(3)其他安全領域的軟件工程師
如今企業(yè)級應用已經(jīng)逐步轉變?yōu)橐苑諡橹鞯漠悩嬻w應用,如Web Service應用等。Java加密算法實現(xiàn)遵循密碼學相關國際標準,完全可以與其他計算機語言(如C++、C#等)構建的異構體應用進行數(shù)據(jù)加密交互。本書為讀者選擇合適算法及實現(xiàn)提供了詳盡的技術支持。
如何閱讀本書
全書一共分為3個部分:基礎篇、實踐篇、綜合應用篇。
(1)基礎篇
本篇共包含4章,主要對Java企業(yè)級應用安全、密碼學理論和Java中與加密相關的API進行了詳細介紹,并詳細闡述了第三方組件包Bouncy Castle及與Apache Commons Codec相關的API。
第1章主要闡述了當前的安全問題,并給出了安全的相關標準。本書將在后續(xù)章節(jié)中通過各個算法介紹逐一實現(xiàn)這些標準,這些標準同樣是評判系統(tǒng)安全級別的準則。
第2章主要詳述了密碼學相關理論知識,并回顧密碼學的發(fā)展歷程。如果您不曾接觸過密碼學,本章將是您了解密碼學理論的基礎教程。本書后續(xù)章節(jié)會多處應用本章介紹的相關技術名詞。
第3章主要詳述了Java 7安全領域相關API內容,為您詳盡介紹每一個與密碼學相關的類以及方法。本章將是每位安全領域軟件工程師必讀內容,您將在閱讀本書的后續(xù)章節(jié)時經(jīng)常翻閱本章內容。
第4章主要介紹了如何通過權限文件加強系統(tǒng)安全級別,并詳述了開源組件Bouncy Castle及與Apache Commons Codec相關API內容。如果您正苦于AES算法密鑰長度受限,SHA224、ElGamal、ECDSA等算法缺少支持等問題,那么請您閱讀本章;如果您非常希望找到Base64及十六進制編碼算法的成熟開源組件,也請您閱讀本章。本書將在后續(xù)章節(jié)中介紹如何使用這些開源組件并實現(xiàn)相關算法。
(2)實踐篇
本篇主要對現(xiàn)今流行的所有加密算法進行了全面闡述和深入剖析,并配合相關測試用例演示算法實現(xiàn)。在閱讀本篇前,請閱讀第2章相關理論知識,并了解第3~4章相關API內容。本篇將是所有企業(yè)級應用Java軟件工程師的必讀內容。
第5章介紹了極為簡單的Base64算法,該算法可以作為加密算法入門算法。如果您僅需要確保應用交互的數(shù)據(jù)可以達到隱藏的目的,那么在第5章中您一定可以找到滿意的答案。
第6章主要詳述了MD系列、SHA系列以及MAC系列三大消息摘要算法相關實現(xiàn),并詳細介紹了如何使用Bouncy Castle構建Java 7所不支持的算法實現(xiàn)。對于一般網(wǎng)絡應用,經(jīng)常需要為下載軟件提供對應的摘要信息以校驗文件完整性。相信在閱讀完本章后,您便可熟練使用Apache Commons Codec為應用實現(xiàn)校驗文件完整性的需求。
第7章將沿著對稱加密算法的發(fā)展歷程,詳述了DES、DESede、AES和PBE四大算法的實現(xiàn)細節(jié),并詳細介紹了如何使用Bouncy Castle構建目前較為常用的IDEA算法。這些算法適用于中小型企業(yè)級應用網(wǎng)絡數(shù)據(jù)加密交互需求,同時也適用于其他安全領域相關需求,是應用最為廣泛的加密算法,更是密碼學領域的核心算法。如果您僅想通過對稱加密算法及消息摘要算法構建簡單的加密網(wǎng)絡應用,那么本章提供的實例將非常適合您。
第8章主要詳述了構建于對稱加密算法之上的非對稱加密算法,包括DH、RSA和ElGamal三大常用算法。本章是本書后續(xù)內容的基礎,數(shù)字簽名算法、數(shù)字證書、安全協(xié)議等內容都與本章內容息息相關,請您在閱讀后續(xù)章節(jié)前仔細閱讀本章。如果您對單向/雙向認證服務底層實現(xiàn)非常感興趣,并想要知道它的來龍去脈,那么本章就是您探究該技術旅途上的第一個驛站。
第9章詳述了基于消息摘要算法和非對稱加密算法之上的數(shù)字簽名算法,包括RSA、DSA和ECDSA三大常用算法。數(shù)字簽名算法是消息摘要算法的延續(xù),是單向/雙向認證服務核心認證技術。如果您想通過非對稱加密算法構建簡單的網(wǎng)絡加密應用,并期望使用數(shù)字簽名算法對數(shù)據(jù)進行校驗,那么本章的實例將非常適合您。(3)綜合應用篇
本篇不僅細致地介紹了加密技術對數(shù)字證書和SSL/TLS協(xié)議的應用,還以示例的方式講解了加密解密技術在實際網(wǎng)絡中的各種應用,極具實踐指導性。請您在閱讀本章前仔細閱讀實踐篇相關內容。本篇內容將是系統(tǒng)架構師的最愛。
第10章詳細介紹了如何使用KeyTool和OpenSSL兩大工具進行數(shù)字證書管理,并詳細介紹了如何在Java中使用數(shù)字證書。數(shù)字證書是非對稱加密算法公鑰的載體,是SSL/TLS協(xié)議和單向/雙向認證服務的基礎。如果您想要構建安全的HTTPS網(wǎng)絡服務應用,請先閱讀本章。
第11章主要介紹了SSL/TLS協(xié)議及單向/雙向認證服務。這將是您探究單向/雙向認證服務技術旅途上的最后一站。本章詳述了如何通過簡單配置Tomcat服務器快速構建單向/雙向認證服務,內容翔實、極具實踐性。
第12章是本書的實例集合,通過三套網(wǎng)絡應用實例揭示常規(guī)網(wǎng)絡應用安全、即時通信網(wǎng)絡應用安全和以數(shù)據(jù)交互為主的Web Service應用安全,并通過網(wǎng)絡監(jiān)測工具WireShark對其效果進行檢測。通過不同算法的組合,三套實例逐步升級自身系統(tǒng)的安全級別,極具指導意義。您將在本章找到解決網(wǎng)絡安全問題的可行性參考。
通過閱讀本書,讀者不僅能全面掌握Java加密與解密的各種基礎知識,還能進一步了解Java加密與解密的高級技術和技巧,從而將這些知識都運用到實際開發(fā)中去。
新版變更說明
對比上一版本,在新版中主要對JDK、Bouncy Castle等進行了版本更新,補充了新版本中特有的算法實現(xiàn)與實例,并對上一版中存在的疏漏進行了修正。新版內容基于Java 7,對比Java 6其在安全性上有所提升。新增了EC算法安全提供者,同時增加了用于EC密鑰構建的API等。根據(jù)筆者的觀察,種種現(xiàn)象預示著在Java SE后續(xù)版本中可能會進一步增強EC系列算法的相應實現(xiàn),如ECDH算法等。同時,一些只能在Bouncy Castle中才能實現(xiàn)的算法,正被Java SE 7所蠶食,如SHA256withRSA算法等。在新版中引入了Bouncy Castle 1.49,擴展了對于OpenSSL的PEM文件操作實現(xiàn)等。同時,應讀者需求,新版中補充了OpenSSL在Base64、消息摘要方面的操作運用。
讀者約定
本書內容主要基于Java 7,書中的代碼實現(xiàn)請參考相關API。
在本書中,我們用環(huán)境變量%JDK_HOME%來表示JDK的安裝路徑;用環(huán)境變量%JRE_HOME%來表示JRE的安裝路徑。如將JDK安裝在C:\java\jdk目錄下,變量%JDK_HOME%則指向該目錄。相應的,如將JRE安裝在C:\ java \jre目錄下,變量%JRE_HOME%則指向該目錄。
本書代碼演示所使用的IDE為Eclipse。
閱讀本書前,我們約定您已了解了以下內容:
(1)測試組件包—JUnit
本書將通過測試工具JUnit,以白盒測試的方式演示如何使用Java完成相應的加密與解密操作。
本書將使用JUnit 4.5版本,以注解的方式構建白盒測試。讀者可通過其官方網(wǎng)站(http://www.junit.org/)下載最新版本。
(2)編碼組件包—Commons Codec
Commons Codec(http://commons.apache.org/codec/)是一款開源編碼組件,它位于國際開源組織Apache(http://www.apache.org/)旗下。它對Java API做了進一步封裝,用于Hex、Base64編碼增強實現(xiàn)。本書中使用的版本為1.4。讀者朋友可通過其官方網(wǎng)站下載最新版本。
(3)加密組件包—Bouncy Castle
Bouncy Castle(http://www.bouncycastle.org/)是一個開源加密組件。它提供了多種Java API所不支持的算法實現(xiàn),如消息摘要算法MD4和SHA224、對稱加密算法IDEA、數(shù)字簽名算法ECDSA等。本書中使用的版本為1.49。
(4)網(wǎng)絡監(jiān)聽工具—WireShark
本書將通過網(wǎng)絡監(jiān)聽工具WireShark完成對網(wǎng)絡數(shù)據(jù)的監(jiān)控,請讀者參考相關文檔。讀者可通過其官方網(wǎng)站(http://www.wireshark.org/)下載最新版本。
(5)密碼&證書管理工具—OpenSSL
OpenSSL(http://www.openssl.org/)是一個基于命令行密碼&證書管理工具,可用于密鑰的生成、加密/解密、簽名/驗證、數(shù)字證書管理等。
- JavaScript高效圖形編程
- SoapUI Cookbook
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- ThinkPHP 5實戰(zhàn)
- Visual FoxPro程序設計教程
- 圖解Java數(shù)據(jù)結構與算法(微課視頻版)
- 軟件測試工程師面試秘籍
- Python高級編程
- Python 3網(wǎng)絡爬蟲實戰(zhàn)
- Oracle數(shù)據(jù)庫從入門到運維實戰(zhàn)
- Getting Started with Python Data Analysis
- Swift語言實戰(zhàn)精講
- Cybersecurity Attacks:Red Team Strategies
- Python+Tableau數(shù)據(jù)可視化之美
- Unity&VR游戲美術設計實戰(zhàn)