




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于密码加密 /wiki/security/1715-password-based-encryption原创作者: snowolf 阅读:689次 评论:0条 更新时间:2009-05-27 除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法PBE PBE PBEPassword-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。 通过java代码实现如下:Coder类见 单向加密 Java代码 1. importjava.security.Key; 2. importjava.util.Random; 3. 4. importjavax.crypto.Cipher; 5. importjavax.crypto.SecretKey; 6. importjavax.crypto.SecretKeyFactory; 7. importjavax.crypto.spec.PBEKeySpec; 8. importjavax.crypto.spec.PBEParameterSpec; 9. 10. /* 11. *PBE安全编码组件 12. * 13. *author梁栋 14. *version1.0 15. *since1.0 16. */17. publicabstractclassPBECoderextendsCoder 18. /* 19. *支持以下任意一种算法 20. * 21. * 22. *PBEWithMD5AndDES 23. *PBEWithMD5AndTripleDES 24. *PBEWithSHA1AndDESede 25. *PBEWithSHA1AndRC2_40 26. * 27. */28. publicstaticfinalStringALGORITHM=PBEWITHMD5andDES; 29. 30. /* 31. *盐初始化 32. * 33. *return 34. *throwsException 35. */36. publicstaticbyteinitSalt()throwsException 37. bytesalt=newbyte8; 38. Randomrandom=newRandom(); 39. random.nextBytes(salt); 40. returnsalt; 41. 42. 43. /* 44. *转换密钥 45. * 46. *parampassword 47. *return 48. *throwsException 49. */50. privatestaticKeytoKey(Stringpassword)throwsException 51. PBEKeySpeckeySpec=newPBEKeySpec(password.toCharArray(); 52. SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance(ALGORITHM); 53. SecretKeysecretKey=keyFactory.generateSecret(keySpec); 54. 55. returnsecretKey; 56. 57. 58. /* 59. *加密 60. * 61. *paramdata 62. *数据 63. *parampassword 64. *密码 65. *paramsalt 66. *盐 67. *return 68. *throwsException 69. */70. publicstaticbyteencrypt(bytedata,Stringpassword,bytesalt) 71. throwsException 72. 73. Keykey=toKey(password); 74. 75. PBEParameterSpecparamSpec=newPBEParameterSpec(salt,100); 76. Ciphercipher=Cipher.getInstance(ALGORITHM); 77. cipher.init(Cipher.ENCRYPT_MODE,key,paramSpec); 78. 79. returncipher.doFinal(data); 80. 81. 82. 83. /* 84. *解密 85. * 86. *paramdata 87. *数据 88. *parampassword 89. *密码 90. *paramsalt 91. *盐 92. *return 93. *throwsException 94. */95. publicstaticbytedecrypt(bytedata,Stringpassword,bytesalt) 96. throwsException 97. 98. Keykey=toKey(password); 99. 100. PBEParameterSpecparamSpec=newPBEParameterSpec(salt,100); 101. Ciphercipher=Cipher.getInstance(ALGORITHM); 102. cipher.init(Cipher.DECRYPT_MODE,key,paramSpec); 103. 104. returncipher.doFinal(data); 105. 106. 107. import java.security.Key;import java.util.Random;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;/* * PBE安全编码组件 * * author 梁栋 * version 1.0 * since 1.0 */public abstract class PBECoder extends Coder /* * 支持以下任意一种算法 * * * PBEWithMD5AndDES * PBEWithMD5AndTripleDES * PBEWithSHA1AndDESede * PBEWithSHA1AndRC2_40 * */public static final String ALGORITHM = PBEWITHMD5andDES;/* * 盐初始化 * * return * throws Exception */public static byte initSalt() throws Exception byte salt = new byte8;Random random = new Random();random.nextBytes(salt);return salt;/* * 转换密钥 * * param password * return * throws Exception */private static Key toKey(String password) throws Exception PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray();SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);SecretKey secretKey = keyFactory.generateSecret(keySpec);return secretKey;/* * 加密 * * param data * 数据 * param password * 密码 * param salt * 盐 * return * throws Exception */public static byte encrypt(byte data, String password, byte salt)throws Exception Key key = toKey(password);PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);return cipher.doFinal(data);/* * 解密 * * param data * 数据 * param password * 密码 * param salt * 盐 * return * throws Exception */public static byte decrypt(byte data, String password, byte salt)throws Exception Key key = toKey(password);PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);return cipher.doFinal(data);再给出一个测试类: Java代码 1. importstaticorg.junit.Assert.*; 2. 3. importorg.junit.Test; 4. 5. /* 6. * 7. *author梁栋 8. *version1.0 9. *since1.0 10. */11. publicclassPBECoderTest 12. 13. Test14. publicvoidtest()throwsException 15. StringinputStr=abc; 16. System.err.println(原文:+inputStr); 17. byteinput=inputStr.getBytes(); 18. 19. Stringpwd=efg; 20. System.err.println(密码:+pwd); 21. 22. bytesalt=PBECoder.initSalt(); 23. 24. bytedata=PBECoder.encrypt(input,pwd,salt); 25. 26. System.err.println(加密后:+PBECoder.encryptBASE64(data); 27. 28. byteoutput=PBECoder.decrypt(data,pwd,salt); 29. StringoutputStr=newString(output); 30. 31. System.err.println(解密后:+outputStr); 32. assertEquals(inputStr,outputStr); 33. 34. 35. import static org.junit.Assert.*;import org.junit.Test;/* * * author 梁栋 * version 1.0 * since 1.0 */public class PBECoderTest Testpublic void test() throws Exception String inputStr = abc;System.err.println(原文: + inputStr);byte input = inputStr.getBytes();String pwd = efg;System.err.println(密码: + pwd);byte salt = PBECoder.initSalt();byte data = PBECoder.encrypt(input, pwd, salt);Sys
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食堂素食日活动方案
- 航空技术考试题及答案
- 汉字练字考试题及答案
- 广州医保考试题及答案
- 古诗考试题及答案小学
- 各地校长考试题及答案
- 新闻写作基础知识与实践应用教学
- 团队项目管理进度跟踪表
- 防震减灾考试题及答案
- 采购合同条款标准化模板
- 乡镇综合行政执法队队长试用期满转正工作总结
- 2025天津医科大学眼科医院第三批招聘1人备考考试试题及答案解析
- 2025年法院书记员招聘考试笔试试题含答案
- CPK、PPK和SPC(X-R控制图)模板
- 汉诺塔课件教学课件
- 2025年二级建造师考试施工管理真题及答案
- 穿线施工方案(3篇)
- 2025年北京市高考英语试卷真题(含答案解析)
- 医务科依法执业自查表
- 高中数学竞赛讲义-高中数学竞赛
- YB/T 100-1997集成电路引线框架用4J42K合金冷轧带材
评论
0/150
提交评论