




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
消息摘要算法-MAC算法系列一、简述 mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。关于hmac算法的详情可以参看RFC 2104(/rfc/rfc2104.txt),这里包含了HmacMD5算法的C语言实现。 这里需要说明的是经过mac算法得到的摘要值也可以使用十六进制编码表示,其摘要值得长度与实现算法的摘要值长度相同。例如 HmacSHA算法得到的摘要长度就是SHA1算法得到的摘要长度,都是160位二进制数,换算成十六进制的编码为40位。二、模型分析甲乙双方进行数据交换可以采取如下流程完成1、甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)2、甲乙双方按照约定构造密钥,双方拥有相同的密钥(一般是一方构造密钥后通知另外一方,此过程不需要通过程序实现,就是双方约定个字符串,但是这个字符串可不是随便设定的,也是通过相关算法获取的)3、甲方使用密钥对消息做摘要处理,然后将消息和生成的摘要消息一同发送给乙方4、乙方收到消息后,使用甲方已经公布的摘要算法+约定好的密钥 对收到的消息进行摘要处理。然后比对自己的摘要消息和甲方发过来的摘要消息。甄别消息是否是甲方发送过来的三、MAC系列算法支持表算法摘要长度备注HmacMD5128JAVA6实现HmacSHA1160JAVA6实现HmacSHA256256JAVA6实现HmacSHA384384JAVA6实现HmacSHA512512JAVA6实现HmacMD2128BouncyCastle实现HmacMD4128BouncyCastle实现HmacSHA224224BouncyCastle实现四、sun以及bouncycastle的hmac算法实现javaview plaincopy1. packagecom.ca.test;2. importjava.security.Security;3. importjavax.crypto.KeyGenerator;4. importjavax.crypto.Mac;5. importjavax.crypto.SecretKey;6. importjavax.crypto.spec.SecretKeySpec;7. vider.BouncyCastleProvider;8. importorg.bouncycastle.util.encoders.Hex;9. /*10. *MAC消息摘要组件11. *authorkongqz12. */13. publicclassMACCoder14. /HmacMD5/15. /*16. *初始化HmacMD5的密钥17. *returnbyte密钥18. *19. */20. publicstaticbyteinitHmacMD5Key()throwsException21. /初始化KeyGenerator22. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacMD5);23. /产生密钥24. SecretKeysecretKey=keyGenerator.generateKey();25. /获取密钥26. returnsecretKey.getEncoded();27. 28. /*29. *HmacMD5消息摘要30. *paramdata待做摘要处理的数据31. *paramkey密钥32. *returnbyte消息摘要33. */34. publicstaticbyteencodeHmacMD5(bytedata,bytekey)throwsException35. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有36. SecretKeysecretKey=newSecretKeySpec(key,HmacMD5);37. /实例化Mac38. Macmac=Mac.getInstance(secretKey.getAlgorithm();39. /初始化Mac40. mac.init(secretKey);41. /执行消息摘要处理42. returnmac.doFinal(data);43. 44. 45. /HmacSHA1/46. /*47. *初始化HmacSHA1的密钥48. *returnbyte密钥49. *50. */51. publicstaticbyteinitHmacSHAKey()throwsException52. /初始化KeyGenerator53. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacSHA1);54. /产生密钥55. SecretKeysecretKey=keyGenerator.generateKey();56. /获取密钥57. returnsecretKey.getEncoded();58. 59. /*60. *HmacSHA1消息摘要61. *paramdata待做摘要处理的数据62. *paramkey密钥63. *returnbyte消息摘要64. */65. publicstaticbyteencodeHmacSHA(bytedata,bytekey)throwsException66. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有67. SecretKeysecretKey=newSecretKeySpec(key,HmacSHA1);68. /实例化Mac69. Macmac=Mac.getInstance(secretKey.getAlgorithm();70. /初始化Mac71. mac.init(secretKey);72. /执行消息摘要处理73. returnmac.doFinal(data);74. 75. 76. /HmacSHA256/77. /*78. *初始化HmacSHA256的密钥79. *returnbyte密钥80. *81. */82. publicstaticbyteinitHmacSHA256Key()throwsException83. /初始化KeyGenerator84. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacSHA256);85. /产生密钥86. SecretKeysecretKey=keyGenerator.generateKey();87. /获取密钥88. returnsecretKey.getEncoded();89. 90. /*91. *HmacSHA256消息摘要92. *paramdata待做摘要处理的数据93. *paramkey密钥94. *returnbyte消息摘要95. */96. publicstaticbyteencodeHmacSHA256(bytedata,bytekey)throwsException97. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有98. SecretKeysecretKey=newSecretKeySpec(key,HmacSHA256);99. /实例化Mac100. Macmac=Mac.getInstance(secretKey.getAlgorithm();101. /初始化Mac102. mac.init(secretKey);103. /执行消息摘要处理104. returnmac.doFinal(data);105. 106. 107. /HmacSHA384/108. /*109. *初始化HmacSHA384的密钥110. *returnbyte密钥111. *112. */113. publicstaticbyteinitHmacSHA384Key()throwsException114. /初始化KeyGenerator115. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacSHA384);116. /产生密钥117. SecretKeysecretKey=keyGenerator.generateKey();118. /获取密钥119. returnsecretKey.getEncoded();120. 121. /*122. *HmacSHA384消息摘要123. *paramdata待做摘要处理的数据124. *paramkey密钥125. *returnbyte消息摘要126. */127. publicstaticbyteencodeHmacSHA384(bytedata,bytekey)throwsException128. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有129. SecretKeysecretKey=newSecretKeySpec(key,HmacSHA384);130. /实例化Mac131. Macmac=Mac.getInstance(secretKey.getAlgorithm();132. /初始化Mac133. mac.init(secretKey);134. /执行消息摘要处理135. returnmac.doFinal(data);136. 137. 138. /HmacSHA512/139. /*140. *初始化HmacSHA512的密钥141. *returnbyte密钥142. *143. */144. publicstaticbyteinitHmacSHA512Key()throwsException145. /初始化KeyGenerator146. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacSHA512);147. /产生密钥148. SecretKeysecretKey=keyGenerator.generateKey();149. /获取密钥150. returnsecretKey.getEncoded();151. 152. /*153. *HmacSHA512消息摘要154. *paramdata待做摘要处理的数据155. *paramkey密钥156. *returnbyte消息摘要157. */158. publicstaticbyteencodeHmacSHA512(bytedata,bytekey)throwsException159. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有160. SecretKeysecretKey=newSecretKeySpec(key,HmacSHA512);161. /实例化Mac162. Macmac=Mac.getInstance(secretKey.getAlgorithm();163. /初始化Mac164. mac.init(secretKey);165. /执行消息摘要处理166. returnmac.doFinal(data);167. 168. /HmacMD2-BouncyCastle才支持的实现/169. /*170. *初始化HmacMD2的密钥171. *returnbyte密钥172. */173. publicstaticbyteinitHmacMD2Key()throwsException174. 175. /加入BouncyCastleProvider的支持176. Security.addProvider(newBouncyCastleProvider();177. /初始化KeyGenerator178. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacMD2);179. /产生密钥180. SecretKeysecretKey=keyGenerator.generateKey();181. /获取密钥182. returnsecretKey.getEncoded();183. 184. /*185. *HmacMD2消息摘要186. *paramdata待做摘要处理的数据187. *paramkey密钥188. *returnbyte消息摘要189. */190. publicstaticbyteencodeHmacMD2(bytedata,bytekey)throwsException191. /加入BouncyCastleProvider的支持192. Security.addProvider(newBouncyCastleProvider();193. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有194. SecretKeysecretKey=newSecretKeySpec(key,HmacMD2);195. /实例化Mac196. Macmac=Mac.getInstance(secretKey.getAlgorithm();197. /初始化Mac198. mac.init(secretKey);199. /执行消息摘要处理200. returnmac.doFinal(data);201. 202. /*203. *HmacMD2Hex消息摘要204. *paramdata待做消息摘要处理的数据205. *paramString密钥206. *returnbyte消息摘要207. */208. publicstaticStringencodeHmacMD2Hex(bytedata,bytekey)throwsException209. /执行消息摘要处理210. byteb=encodeHmacMD2(data,key);211. /做十六进制转换212. returnnewString(Hex.encode(b);213. 214. 215. /HmacMD4-BouncyCastle才支持的实现/216. /*217. *初始化HmacMD2的密钥218. *returnbyte密钥219. */220. publicstaticbyteinitHmacMD4Key()throwsException221. 222. /加入BouncyCastleProvider的支持223. Security.addProvider(newBouncyCastleProvider();224. /初始化KeyGenerator225. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacMD4);226. /产生密钥227. SecretKeysecretKey=keyGenerator.generateKey();228. /获取密钥229. returnsecretKey.getEncoded();230. 231. /*232. *HmacMD4消息摘要233. *paramdata待做摘要处理的数据234. *paramkey密钥235. *returnbyte消息摘要236. */237. publicstaticbyteencodeHmacMD4(bytedata,bytekey)throwsException238. /加入BouncyCastleProvider的支持239. Security.addProvider(newBouncyCastleProvider();240. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有241. SecretKeysecretKey=newSecretKeySpec(key,HmacMD4);242. /实例化Mac243. Macmac=Mac.getInstance(secretKey.getAlgorithm();244. /初始化Mac245. mac.init(secretKey);246. /执行消息摘要处理247. returnmac.doFinal(data);248. 249. /*250. *HmacMD4Hex消息摘要251. *paramdata待做消息摘要处理的数据252. *paramString密钥253. *returnbyte消息摘要254. */255. publicstaticStringencodeHmacMD4Hex(bytedata,bytekey)throwsException256. /执行消息摘要处理257. byteb=encodeHmacMD4(data,key);258. /做十六进制转换259. returnnewString(Hex.encode(b);260. 261. /HmacSHA224-BouncyCastle才支持的实现/262. /*263. *初始化HmacSHA224的密钥264. *returnbyte密钥265. */266. publicstaticbyteinitHmacSHA224Key()throwsException267. 268. /加入BouncyCastleProvider的支持269. Security.addProvider(newBouncyCastleProvider();270. /初始化KeyGenerator271. KeyGeneratorkeyGenerator=KeyGenerator.getInstance(HmacSHA224);272. /产生密钥273. SecretKeysecretKey=keyGenerator.generateKey();274. /获取密钥275. returnsecretKey.getEncoded();276. 277. /*278. *HmacSHA224消息摘要279. *paramdata待做摘要处理的数据280. *paramkey密钥281. *returnbyte消息摘要282. */283. publicstaticbyteencodeHmacSHA224(bytedata,bytekey)throwsException284. /加入BouncyCastleProvider的支持285. Security.addProvider(newBouncyCastleProvider();286. /还原密钥,因为密钥是以byte形式为消息传递算法所拥有287. SecretKeysecretKey=newSecretKeySpec(key,HmacSHA224);288. /实例化Mac289. Macmac=Mac.getInstance(secretKey.getAlgorithm();290. /初始化Mac291. mac.init(secretKey);292. /执行消息摘要处理293. returnmac.doFinal(data);294. 295. /*296. *HmacSHA224Hex消息摘要297. *paramdata待做消息摘要处理的数据298. *paramString密钥299. *returnbyte消息摘要300. */301. publicstaticStringencodeHmacSHA224Hex(bytedata,bytekey)throwsException302. /执行消息摘要处理303. byteb=encodeHmacSHA224(data,key);304. /做十六进制转换305. returnnewString(Hex.encode(b);306. 307. /*308. *进行相关的摘要算法的处理展示309. *throwsException310. */311. publicstaticvoidmain(Stringargs)throwsException312. Stringstr=HmacMD5消息摘要;313. /初始化密钥314. bytekey1=MACCoder.initHmacMD5Key();315. /获取摘要信息316. bytedata1=MACCoder.encodeHmacMD5(str.getBytes(),key1);317. 318. System.out.println(原文:+str);319. System.out.println();320. System.out.println(HmacMD5的密钥:+key1.toString();321. System.out.println(HmacMD5算法摘要:+data1.toString();322. System.out.println();323. 324. /初始化密钥325. bytekey2=MACCoder.initHmacSHA256Key();326. /获取摘要信息327. bytedata2=MACCoder.encodeHmacSHA256(str.getBytes(),key2);328. System.out.println(HmacSHA256的密钥:+key2.toString();329. System.out.println(HmacSHA256算法摘要:+data2.toString();330. System.out.println();331. 332. 333. /初始化密钥334. bytekey3=MACCoder.initHmacSHAKey();335. /获取摘要信息336. bytedata3=MACCoder.encodeHmacSHA(str.getBytes(),key3);337. System.out.println(HmacSHA1的密钥:+key3.toString();338. System.out.println(HmacSHA1算法摘要:+data3.toString();339. System.out.println();340. 341. 342. /初始化密钥343. bytekey4=MACCoder.initHmacSHA384Key();344. /获取摘要信息345. bytedata4=MACCoder.encodeHmacSHA384(str.getBytes(),key4);346. System.out.println(HmacSHA384的密钥:+key4.toString();347. System.out.println(HmacSHA384算法摘要:+data4.toString();348. System.out.println();349. 350. 351. /初始化密钥352. bytekey5=MACCoder.initHmacSHA512Key();353. /获取摘要信息354. bytedata5=MACCoder.encodeHmacSHA512(str.getBytes(),key5);355. System.out.println(HmacSHA512的密钥:+key5.toString();356. System.out.println(HmacSHA512算法摘要:+data5.toString();357. System.out.println();358. 359. System.out.println(=以下的算法支持是bouncycastle支持的算法,sunjava6不支持=);360. /初始化密钥361. bytekey6=MACCoder.initHmacMD2Key();362. /获取摘要信息363. bytedata6=MACCoder.encodeHmacMD2(str.getBytes(),key6);364. Stringdatahex6=MACCoder.encodeHmacMD2Hex(str.getBytes(),key6);365. System.out.println(BouncycastleHmacMD2的密钥:+key6.toString();366. System.out.println(BouncycastleHmacMD2算法摘要:+data6.toString();367. System.out.println(BouncycastleHmacMD2Hex算法摘要:+datahex6.toString();368. System.out.println();369. 370. /初始化密钥371. bytekey7=MACCoder.initHmacMD4Key();372. /获取摘要信息373. bytedata7=MACCoder.encodeHmacMD4(str.getBytes(),key7);374. Stringdatahex7=MACCoder.encodeHmacMD4Hex(str.getBytes(),key7);375. System.out.println(BouncycastleHmacMD4的密钥:+key7.toString();376. System.out.println(BouncycastleHmacMD4算法摘要:+data7.toString();377. System.out.println(BouncycastleHmacMD4Hex算法摘要:+datahex7.toString();378. System.out.println();379. 380. /初始化密钥381. bytekey8=MACCoder.initHmacSHA224Key();382. /获取摘要信息383. bytedata8=MACCoder.encodeHmacSHA224(str.get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023七年级英语下册 Unit 11 How was your school trip说课稿 (新版)人教新目标版
- 2025租房转让合同协议书
- set协议书又称为
- 课堂教学设计模板(V91)
- 陕西地区中石油2025秋招笔试综合知识专练题库及答案
- 课堂教学设计表李拥军
- 鹤岗市中石油2025秋招笔试英语专练题库及答案
- 231图形的旋转 说课稿人教版数学九年级上册
- 海伦·凯勒课件
- 2025年安全员竞聘上岗考试题库及答案
- 2025年合肥公交集团有限公司驾驶员招聘180人笔试参考题库附带答案详解
- 2024年上海市大数据中心招聘真题
- 2025年网络安全监测预警体系建设实施方案评估报告
- 2025年会计继续教育网络答题真题及答案
- 2025年工勤行政事务高级技师技术等级考试试题及答案
- 中国银行招聘笔试真题及答案(可下载)
- 高血压指南培训课件
- 设计文件更改管理办法
- 数字赋能教学课件
- 机器点钞技术课件
- 朗格罕细胞组织细胞增生
评论
0/150
提交评论