熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

論Java加密技術與Windows的結合

2013-11-23 19:01:13  來源: Java核心技術 

  論Java加密技術與Windows的結合
  
  作者:獨行客
  
    公共鑰匙加密技術需要一個空間來存儲數字證書和私鑰通過將鑰匙和證書存儲到一個文件中(稱為keystore)Java Security Architecture實現了獨立於平台的加密技術
  
    Microsoft Windows把鑰匙和證書存儲到Windows注冊表和文件系統中這就是說在Windows系統上運行安全的Java程序的用戶必須在Java和Microsoft的鑰匙和證書庫之間輸入和輸出鑰匙和證書好消息是你可以哄騙Java應用程序通過Microsoft本地函數來運用Microsoft的證書和鑰匙庫
  
    通過將你的Java應用程序同Windows 鑰匙/證書庫結合起來你雖然犧牲了平台獨立姓但你得到了四個好處減少了管理和支持的成本更方便用戶使用更好的證書撤消校驗以及更好的鑰匙和證書管理工具
  
    一個Java程序必須通過四個不同的類實現與Windows加密術的集成 · TrustManager Provider用這個類來實現與Windows證書庫的集成並實現安全策略
  
    · KeyManager Provider用這個類來實現與Windows私鑰庫的集成
  
    · RSA Signature Provider數字簽名需要訪問私鑰庫如果Java程序不能讀取私鑰(比如如果私鑰存在一個加密了的智能卡上了)那麼簽名操作就必須在Windows中進行
  
    · RSA Cipher Provider解密RSA加密的數據(如加密套接字協議層(SSL)對稱的鑰匙)需要訪問私鑰庫如果Java程序不能讀取私鑰(比如如果私鑰存在一個加密了的智能卡上了)那麼RSA解密操作就必須在Windows中進行
  
    我將講述與Windows平台集成的TrustManager ProviderKeyManager ProviderRSA Signature Provider和RSA Cipher Provider的用法TrustManager和KeyManager可以讓你構建可運行的Windows支持的Java Secure Socket Extension(JSSE)應用程序JSSE范例程序——EchoServer和EchoClient可以證明這一點你不能覆蓋JSSE的內置的RSA Cipher Provider所以只有當私鑰可以從Windows鑰匙庫中輸出時JSSE應用程序才可以運行
  
    如果你在編寫一個運用RSA簽名或RSA加密的Java應用程序那麼你可以運用Windows支持的RSA Signature Provider和Cipher Provider這不需要從Windows鑰匙庫中輸出私鑰對於其它三個提供者(provider)你可以單獨使用每一個
  
    該代碼是用 beta版JDK rc開發的很穩定不過我們打算將該代碼作為一個框架進行進一步的開發在將該代碼用於生產環境前你應該改進異常處理確信在本地代碼中沒有內存洩露並使密鑰的暴露降低到最小為了測試代碼你需要一個RSA數字證書你可以從VeriSign網站/client/enrollment得到一個臨時證書有效期是具體操作請遵循該站點上的指南不要選定標為Protect your Private Key的框因為沒有選定這個框你的私鑰就可以輸出
  
    下面的代碼初試化了四個提供者
  
  
  
  MSTrustMgrProviderinstall()
  
  MSKeyMgrProviderinstall()
  
  MSRSASignProviderinstall()
  
  MSRSACipherProviderinstall()
  
  kmf = KeyManagerFactory
  
  getInstance(MSKMF
  
  tmf = TrustManagerFactory
  
  getInstance(MSTMF
  
  Cipher cipher =
  
  CiphergetInstance(
  
  RSA/ECB/PKCSPadding
  
  Signature rsa =
  
  SignaturegetInstance(
  
  SHAwithRSA
  
  
  
    所有的四個提供者都調用了個本地的Microsoft函數
  
    · MSgetCACerts()從Microsoft證書庫返回一列認證授權中心(Certificate Authority (CA))簽發的證書
  
    · 如果一個證書沒有被撤消MSVerifyCertRevocation()返回true
  
    · MSgetPrivateKey()為一個特定的別名(alias )返回私鑰(這裡所說的一個別名就是帶有一個RSA私鑰和證書的一個身份)鑰匙從Microsoft鑰匙庫中輸出
  
    · MSgetCert()為一個特定的別名從Microsoft證書庫中返回一個證書
  
    · MSgetAliases()返回一組別名(帶有私鑰的一個身份的名字)Microsoft鑰匙庫中的每個私鑰都有一個別名
  
    · MSrsaSignHash()返回哈希數據(hashed data)的RSA簽名
  
    · MSrsaDecrypt()用RSA算法來解密一個先前加密了的數據塊
  
    · MSrsaEncrypt()用Microsoft RSA provider來加密一個數據塊
  
    · MSrsaGetKeysize()返回Microsoft鑰匙庫中一個鑰匙的RSA鑰匙大小
  
    · MSgetCRL()將一個證書撤消清單(Certificate Revocation List(CRL))下載到Microsoft Internet緩存中
  
    一個約行的用C語言代碼編寫的源文件mscryptofunctionsc中包含了所有這些函數該代碼可以在Windows /NT//XP上運行
  
  下一頁
  
  論Java加密技術與Windows的結合
  
  nava{FONTSIZE:pt}
  
  function sendemail(){
  
  OpenWindow = windowopen(論Java加密技術與Windows的結合&channel=emailwintoolbar=nolocation=noscrollbars=nomenubar=nowidth=height=)
  
  }
  
  Untitled Document
  
  商務應用
  
  E企業
  
  數字電子
  
  E時代
  
  您現在的位置是
  
  開發者網絡
  
  程序方舟
  
  Java專欄
  
  T O P 排 行
  
  FreeHand MX全新體驗
  
  注冊表知識群集
  
  Delphi經典編程
  
  PHP編程實錄
  
  網 校 熱 門
  
  論Java加密技術與Windows的結合
  
  ·
  
  ·獨行客··天極論壇
  
  上一頁
  
  下一頁
  
  公共鑰匙加密算法
  
    公共鑰匙加密有兩個目的加密和數字簽名公共鑰匙加密運用一個包含兩部分的鑰匙(或一對鑰匙)一個私鑰和一個公鑰公鑰帶有開始和終止日期一個序號一個身份(稱為Subject Distinguished Name)和一個CA的簽名(見列表RSA是最常用的公共鑰匙加密算法
  
  
  
  公共鑰匙加密運用一個公鑰和一個私鑰一個數字證書(如下所示)包含公鑰開始和結束日期一個序號一個身份和一個證書授權中心(CA)的簽名
  
  Serial number:
  
   C AC FC B E
  
  Signature algorithm: mdRSA
  
  Issuer: CN = VeriSign Class CA Individual
  
  SubscriberPersona Not Validated
  
  OU = /repository/RPA Incorp
  
  By RefLIABLTD(c)
  
  OU = VeriSign Trust Network O = VeriSign Inc
  
  Valid from: Wednesday May :: PM
  
  Valid to: Monday July :: PM
  
  Subject: E =
  
  CN = Brian Boyter
  
  OU = Digital ID Class
  
  OU = Persona Not Validated
  
  OU = /repository/RPA Incorp
  
  by refLIABLTD(c)
  
  OU = VeriSign Trust Network O = VeriSign Inc
  
  Public key: BA B F E
  
  CE C BFD D DBB D DFA DBD F
  
  CE BE C DD B F AA AA
  
  B DD DA EF DAB FBE F FF B
  
  A D C D B A EA
  
   BD CC A DE FF B F
  
   AE FAB F D CC CB
  
  C E EFDC D B B
  
  Basic constraints: Subject Type=End Entity
  
  Path Length Constraint=None
  
  Certificate policy:
  
  Policy Qualifier Id=CPS Qualifier:
  
  
  
  Policy Qualifier Info:
  
  Organization=VeriSign Inc
  
  Notice Number=
  
  CRL Distribution Point Distribution Point Name:
  
  Full Name:
  
  URL=
  
  Thumbprint algorithm: sha
  
  Thumbprint: A F AA FFC CD AB AFF FE DFFC
  
  
  
    公共鑰匙加密中的加密是用公鑰來完成的解密是用私鑰完成的公共鑰匙加密對於大量的加密來說運算很復雜但它卻被廣泛用來分配密鑰密鑰或對稱加密算法如DES和RC通常用於大量的加密但是密鑰
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26142.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.