首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java加密技术(4)

2012-12-24 
Java加密技术(四)接下来我们介绍典型的非对称加密算法——RSA通过java代码实现如下:Coder类见Java代码import

Java加密技术(四)

接下来我们介绍典型的非对称加密算法——RSA

  • Java加密技术(4)
  • Java加密技术(4)

    通过java代码实现如下:Coder类见Java代码
    1. import?java.security.Key;??
    2. import?java.security.KeyFactory;??
    3. import?java.security.KeyPair;??
    4. import?java.security.KeyPairGenerator;??
    5. import?java.security.PrivateKey;??
    6. import?java.security.PublicKey;??
    7. import?java.security.Signature;??
    8. import?java.security.interfaces.RSAPrivateKey;??
    9. import?java.security.interfaces.RSAPublicKey;??
    10. import?java.security.spec.PKCS8EncodedKeySpec;??
    11. import?java.security.spec.X509EncodedKeySpec;??
    12. ??
    13. import?java.util.HashMap;??
    14. import?java.util.Map;??
    15. ??
    16. import?javax.crypto.Cipher;??
    17. ??
    18. /**?
    19. ?*?RSA安全编码组件?
    20. ?*??
    21. ?*?@author?梁栋?
    22. ?*?@version?1.0?
    23. ?*?@since?1.0?
    24. ?*/??
    25. public?abstract?class?RSACoder?extends?Coder?{??
    26. ????public?static?final?String?KEY_ALGORITHM?=?"RSA";??
    27. ????public?static?final?String?SIGNATURE_ALGORITHM?=?"MD5withRSA";??
    28. ??
    29. ????private?static?final?String?PUBLIC_KEY?=?"RSAPublicKey";??
    30. ????private?static?final?String?PRIVATE_KEY?=?"RSAPrivateKey";??
    31. ??
    32. ????/**?
    33. ?????*?用私钥对信息生成数字签名?
    34. ?????*??
    35. ?????*?@param?data?
    36. ?????*????????????加密数据?
    37. ?????*?@param?privateKey?
    38. ?????*????????????私钥?
    39. ?????*??
    40. ?????*?@return?
    41. ?????*?@throws?Exception?
    42. ?????*/??
    43. ????public?static?String?sign(byte[]?data,?String?privateKey)?throws?Exception?{??
    44. ????????//?解密由base64编码的私钥??
    45. ????????byte[]?keyBytes?=?decryptBASE64(privateKey);??
    46. ??
    47. ????????//?构造PKCS8EncodedKeySpec对象??
    48. ????????PKCS8EncodedKeySpec?pkcs8KeySpec?=?new?PKCS8EncodedKeySpec(keyBytes);??
    49. ??
    50. ????????//?KEY_ALGORITHM?指定的加密算法??
    51. ????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);??
    52. ??
    53. ????????//?取私钥匙对象??
    54. ????????PrivateKey?priKey?=?keyFactory.generatePrivate(pkcs8KeySpec);??
    55. ??
    56. ????????//?用私钥对信息生成数字签名??
    57. ????????Signature?signature?=?Signature.getInstance(SIGNATURE_ALGORITHM);??
    58. ????????signature.initSign(priKey);??
    59. ????????signature.update(data);??
    60. ??
    61. ????????return?encryptBASE64(signature.sign());??
    62. ????}??
    63. ??
    64. ????/**?
    65. ?????*?校验数字签名?
    66. ?????*??
    67. ?????*?@param?data?
    68. ?????*????????????加密数据?
    69. ?????*?@param?publicKey?
    70. ?????*????????????公钥?
    71. ?????*?@param?sign?
    72. ?????*????????????数字签名?
    73. ?????*??
    74. ?????*?@return?校验成功返回true?失败返回false?
    75. ?????*?@throws?Exception?
    76. ?????*??
    77. ?????*/??
    78. ????public?static?boolean?verify(byte[]?data,?String?publicKey,?String?sign)??
    79. ????????????throws?Exception?{??
    80. ??
    81. ????????//?解密由base64编码的公钥??
    82. ????????byte[]?keyBytes?=?decryptBASE64(publicKey);??
    83. ??
    84. ????????//?构造X509EncodedKeySpec对象??
    85. ????????X509EncodedKeySpec?keySpec?=?new?X509EncodedKeySpec(keyBytes);??
    86. ??
    87. ????????//?KEY_ALGORITHM?指定的加密算法??
    88. ????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);??
    89. ??
    90. ????????//?取公钥匙对象??
    91. ????????PublicKey?pubKey?=?keyFactory.generatePublic(keySpec);??
    92. ??
    93. ????????Signature?signature?=?Signature.getInstance(SIGNATURE_ALGORITHM);??
    94. ????????signature.initVerify(pubKey);??
    95. ????????signature.update(data);??
    96. ??
    97. ????????//?验证签名是否正常??
    98. ????????return?signature.verify(decryptBASE64(sign));??
    99. ????}??
    100. ??
    101. ????/**?
    102. ?????*?解密<br>?
    103. ?????*?用私钥解密?
    104. ?????*??
    105. ?????*?@param?data?
    106. ?????*?@param?key?
    107. ?????*?@return?
    108. ?????*?@throws?Exception?
    109. ?????*/??
    110. ????public?static?byte[]?decryptByPrivateKey(byte[]?data,?String?key)??
    111. ????????????throws?Exception?{??
    112. ????????//?对密钥解密??
    113. ????????byte[]?keyBytes?=?decryptBASE64(key);??
    114. ??
    115. ????????//?取得私钥??
    116. ????????PKCS8EncodedKeySpec?pkcs8KeySpec?=?new?PKCS8EncodedKeySpec(keyBytes);??
    117. ????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);??
    118. ????????Key?privateKey?=?keyFactory.generatePrivate(pkcs8KeySpec);??
    119. ??
    120. ????????//?对数据解密??
    121. ????????Cipher?cipher?=?Cipher.getInstance(keyFactory.getAlgorithm());??
    122. ????????cipher.init(Cipher.DECRYPT_MODE,?privateKey);??
    123. ??
    124. ????????return?cipher.doFinal(data);??
    125. ????}??
    126. ??
    127. ????/**?
    128. ?????*?解密<br>?
    129. ?????*?用私钥解密?
    130. ?????*??
    131. ?????*?@param?data?
    132. ?????*?@param?key?
    133. ?????*?@return?
    134. ?????*?@throws?Exception?
    135. ?????*/??
    136. ????public?static?byte[]?decryptByPublicKey(byte[]?data,?String?key)??
    137. ????????????throws?Exception?{??
    138. ????????//?对密钥解密??
    139. ????????byte[]?keyBytes?=?decryptBASE64(key);??
    140. ??
    141. ????????//?取得公钥??
    142. ????????X509EncodedKeySpec?x509KeySpec?=?new?X509EncodedKeySpec(keyBytes);??
    143. ????????KeyFactory?keyFactory?=?KeyFactory.getInstance(KEY_ALGORITHM);??
    144. ????????Key?publicKey?=?keyFactory.generatePublic(x509KeySpec);??
    145. ??
    146. ????????//?对数据解密??
    147. ????????Cipher?cipher?=?Cipher.getInstance(keyFactory.getAlgorithm());??
    148. ????????cipher.init(Cipher.DECRYPT_MODE,?publicKey);??
    149. ??
    150. ????????return?cipher.doFinal(data);??
    151. ????}??
    152. ??
    153. ????/**?
    154. ?????*?加密<br>?
    155. ?????*?用公钥加密?
    156. ?????*??
    157. ?????*?@param?data?
    158. ?????*?@param?key?
    159. ?????*?@return?
    160. ?????*?@throws?Exception?
    161. ?????*/??
    162. ????public?static?byte[]?encryptByPublicKey(byte[]?data,?String?key)??
    163. ????????????throws?Exception?{??
    164. ????????//?对公钥解密??
    165. ????????byte[]?keyBytes?=?decryptBASE64(key);??
    166. ??
    167. ????????//?取得公钥??
    168. ????????X509EncodedKeySpec?x509KeySpec