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

Java加密技术(1)

2012-12-24 
Java加密技术(一)加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,

Java加密技术(一)

加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,实在是太单纯了。Java加密技术(1)Java代码

  1. /**?
  2. ?*?BASE64解密?
  3. ?*??
  4. ?*?@param?key?
  5. ?*?@return?
  6. ?*?@throws?Exception?
  7. ?*/??
  8. public?static?byte[]?decryptBASE64(String?key)?throws?Exception?{??
  9. ????return?(new?BASE64Decoder()).decodeBuffer(key);??
  10. }??
  11. ??
  12. /**?
  13. ?*?BASE64加密?
  14. ?*??
  15. ?*?@param?key?
  16. ?*?@return?
  17. ?*?@throws?Exception?
  18. ?*/??
  19. public?static?String?encryptBASE64(byte[]?key)?throws?Exception?{??
  20. ????return?(new?BASE64Encoder()).encodeBuffer(key);??
  21. }??

主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。Java代码
  1. /**?
  2. ?*?MD5加密?
  3. ?*??
  4. ?*?@param?data?
  5. ?*?@return?
  6. ?*?@throws?Exception?
  7. ?*/??
  8. public?static?byte[]?encryptMD5(byte[]?data)?throws?Exception?{??
  9. ??
  10. ????MessageDigest?md5?=?MessageDigest.getInstance(KEY_MD5);??
  11. ????md5.update(data);??
  12. ??
  13. ????return?md5.digest();??
  14. ??
  15. }??


通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串。Java代码
  1. ????/**?
  2. ?????*?SHA加密?
  3. ?????*??
  4. ?????*?@param?data?
  5. ?????*?@return?
  6. ?????*?@throws?Exception?
  7. ?????*/??
  8. ????public?static?byte[]?encryptSHA(byte[]?data)?throws?Exception?{??
  9. ??
  10. ????????MessageDigest?sha?=?MessageDigest.getInstance(KEY_SHA);??
  11. ????????sha.update(data);??
  12. ??
  13. ????????return?sha.digest();??
  14. ??
  15. ????}??
  16. }??


HMACJava代码
  1. /**?
  2. ?*?初始化HMAC密钥?
  3. ?*??
  4. ?*?@return?
  5. ?*?@throws?Exception?
  6. ?*/??
  7. public?static?String?initMacKey()?throws?Exception?{??
  8. ????KeyGenerator?keyGenerator?=?KeyGenerator.getInstance(KEY_MAC);??
  9. ??
  10. ????SecretKey?secretKey?=?keyGenerator.generateKey();??
  11. ????return?encryptBASE64(secretKey.getEncoded());??
  12. }??
  13. ??
  14. /**?
  15. ?*?HMAC加密?
  16. ?*??
  17. ?*?@param?data?
  18. ?*?@param?key?
  19. ?*?@return?
  20. ?*?@throws?Exception?
  21. ?*/??
  22. public?static?byte[]?encryptHMAC(byte[]?data,?String?key)?throws?Exception?{??
  23. ??
  24. ????SecretKey?secretKey?=?new?SecretKeySpec(decryptBASE64(key),?KEY_MAC);??
  25. ????Mac?mac?=?Mac.getInstance(secretKey.getAlgorithm());??
  26. ????mac.init(secretKey);??
  27. ??
  28. ????return?mac.doFinal(data);??
  29. ??
  30. }??


给出一个完整类,如下:Java代码
  1. import?java.security.MessageDigest;??
  2. ??
  3. import?javax.crypto.KeyGenerator;??
  4. import?javax.crypto.Mac;??
  5. import?javax.crypto.SecretKey;??
  6. ??
  7. import?sun.misc.BASE64Decoder;??
  8. import?sun.misc.BASE64Encoder;??
  9. ??
  10. /**?
  11. ?*?基础加密组件?
  12. ?*??
  13. ?*?@author?梁栋?
  14. ?*?@version?1.0?
  15. ?*?@since?1.0?
  16. ?*/??
  17. public?abstract?class?Coder?{??
  18. ????public?static?final?String?KEY_SHA?=?"SHA";??
  19. ????public?static?final?String?KEY_MD5?=?"MD5";??
  20. ??
  21. ????/**?
  22. ?????*?MAC算法可选以下多种算法?
  23. ?????*??
  24. ?????*?<pre>?
  25. ?????*?HmacMD5??
  26. ?????*?HmacSHA1??
  27. ?????*?HmacSHA256??
  28. ?????*?HmacSHA384??
  29. ?????*?HmacSHA512?
  30. ?????*?</pre>?
  31. ?????*/??
  32. ????public?static?final?String?KEY_MAC?=?"HmacMD5";??
  33. ??
  34. ????/**?
  35. ?????*?BASE64解密?
  36. ?????*??
  37. ?????*?@param?key?
  38. ?????*?@return?
  39. ?????*?@throws?Exception?
  40. ?????*/??
  41. ????public?static?byte[]?decryptBASE64(String?key)?throws?Exception?{??
  42. ????????return?(new?BASE64Decoder()).decodeBuffer(key);??
  43. ????}??
  44. ??
  45. ????/**?
  46. ?????*?BASE64加密?
  47. ?????*??
  48. ?????*?@param?key?
  49. ?????*?@return?
  50. ?????*?@throws?Exception?
  51. ?????*/??
  52. ????public?static?String?encryptBASE64(byte[]?key)?throws?Exception?{??
  53. ????????return?(new?BASE64Encoder()).encodeBuffer(key);??
  54. ????}??
  55. ??
  56. ????/**?
  57. ?????*?MD5加密?
  58. ?????*??
  59. ?????*?@param?data?
  60. ?????*?@return?
  61. ?????*?@throws?Exception?
  62. ?????*/??
  63. ????public?static?byte[]?encryptMD5(byte[]?data)?throws?Exception?{??
  64. border-left: #d1d7dc 1px solid; padding-bottom: 0px; line-height: 18px; backgro

热点排行