还是和之前的原因一个样,一直在用的 MD5 编码,处理英文时没问题,加了中文,就跟 https://tool.oschina.net/encrypt?type=2 和 https://md5jiami.51240.com/ 的结果不一样了,想了下,应该还是 UTF-8 编码的问题,于是将原来在用的编码中和字符串转 Byte 数组函数改装了一下,就成了,转换结果一致,说明工作正确:

  1. '========================================================----------------------MD5 All

  2. public const bits_to_a_byte = 8

  3. public const bytes_to_a_word = 4

  4. public const bits_to_a_word = 32

  5. public m_lonbits(30)

  6. public m_l2power(30)

  7. Public Function converttowordarray(smessage) '进行 UTF-8 改造的就是这个函数

  8. Dim lmessagelength, lnumberofwords, lwordarray(), lbyteposition, lbytecount, lwordcount

  9. dim mAllByteIn '接收数组变量在VBS不能加括号()

  10. Const modulus_bits = 512

  11. Const congruent_bits = 448

  12. '---------翻译为 UTF-8 byte 数组

  13. mAllByteIn = HexStr2ByteArr(str2UTF8(smessage))

  14. lmessagelength = UBound(mAllByteIn) + 1 ' L + 1 ' Len(smessage)

  15. lnumberofwords = (((lmessagelength + 8) \ 64) + 1) * 16

  16. ReDim lwordarray(lnumberofwords - 1)

  17. lbyteposition = 0

  18. lbytecount = 0

  19. Do Until lbytecount >= lmessagelength

  20. lwordcount = lbytecount \ bytes_to_a_word

  21. lbyteposition = (lbytecount Mod bytes_to_a_word) * bits_to_a_byte

  22. ' Asc(Mid(smessage, lbytecount + 1, 1)) =mAllByteIn(lbytecount)

  23. lwordarray(lwordcount) = lwordarray(lwordcount) Or lshift(mAllByteIn(lbytecount), lbyteposition)

  24. lbytecount = lbytecount + 1

  25. Loop

  26. lwordcount = lbytecount \ bytes_to_a_word

  27. lbyteposition = (lbytecount Mod bytes_to_a_word) * bits_to_a_byte

  28. lwordarray(lwordcount) = lwordarray(lwordcount) Or lshift(&H80, lbyteposition)

  29. lwordarray(lnumberofwords - 2) = lshift(lmessagelength, 3)

  30. lwordarray(lnumberofwords - 1) = rshift(lmessagelength, 29)

  31. converttowordarray = lwordarray

  32. End Function

  33. public function lshift(lvalue, ishiftbits)

  34. if ishiftbits = 0 then

  35. lshift = lvalue

  36. exit function

  37. elseif ishiftbits = 31 then

  38. if lvalue and 1 then

  39. lshift = &h80000000

  40. else

  41. lshift = 0

  42. end if

  43. exit function

  44. elseif ishiftbits < 0 or ishiftbits > 31 then

  45. err.raise 6

  46. end if

  47. if (lvalue and m_l2power(31 - ishiftbits)) then

  48. lshift = ((lvalue and m_lonbits(31 - (ishiftbits + 1))) * m_l2power(ishiftbits)) or &h80000000

  49. else

  50. lshift = ((lvalue and m_lonbits(31 - ishiftbits)) * m_l2power(ishiftbits))

  51. end if

  52. end function

  53. public function rshift(lvalue, ishiftbits)

  54. if ishiftbits = 0 then

  55. rshift = lvalue

  56. exit function

  57. elseif ishiftbits = 31 then

  58. if lvalue and &h80000000 then

  59. rshift = 1

  60. else

  61. rshift = 0

  62. end if

  63. exit function

  64. elseif ishiftbits < 0 or ishiftbits > 31 then

  65. err.raise 6

  66. end if

  67. rshift = (lvalue and &h7ffffffe) \ m_l2power(ishiftbits)

  68. if (lvalue and &h80000000) then

  69. rshift = (rshift or (&h40000000 \ m_l2power(ishiftbits - 1)))

  70. end if

  71. end function

  72. public function rotateleft(lvalue, ishiftbits)

  73. rotateleft = lshift(lvalue, ishiftbits) or rshift(lvalue, (32 - ishiftbits))

  74. end function

  75. public function addunsigned(lx, ly)

  76. dim lx4

  77. dim ly4

  78. dim lx8

  79. dim ly8

  80. dim lresult

  81. lx8 = lx and &h80000000

  82. ly8 = ly and &h80000000

  83. lx4 = lx and &h40000000

  84. ly4 = ly and &h40000000

  85. lresult = (lx and &h3fffffff) + (ly and &h3fffffff)

  86. if lx4 and ly4 then

  87. lresult = lresult xor &h80000000 xor lx8 xor ly8

  88. elseif lx4 or ly4 then

  89. if lresult and &h40000000 then

  90. lresult = lresult xor &hc0000000 xor lx8 xor ly8

  91. else

  92. lresult = lresult xor &h40000000 xor lx8 xor ly8

  93. end if

  94. else

  95. lresult = lresult xor lx8 xor ly8

  96. end if

  97. addunsigned = lresult

  98. end function

  99. public function md5_f(x, y, z)

  100. md5_f = (x and y) or ((not x) and z)

  101. end function

  102. public function md5_g(x, y, z)

  103. md5_g = (x and z) or (y and (not z))

  104. end function

  105. public function md5_h(x, y, z)

  106. md5_h = (x xor y xor z)

  107. end function

  108. public function md5_i(x, y, z)

  109. md5_i = (y xor (x or (not z)))

  110. end function

  111. public sub md5_ff(a, b, c, d, x, s, ac)

  112. a = addunsigned(a, addunsigned(addunsigned(md5_f(b, c, d), x), ac))

  113. a = rotateleft(a, s)

  114. a = addunsigned(a, b)

  115. end sub

  116. public sub md5_gg(a, b, c, d, x, s, ac)

  117. a = addunsigned(a, addunsigned(addunsigned(md5_g(b, c, d), x), ac))

  118. a = rotateleft(a, s)

  119. a = addunsigned(a, b)

  120. end sub

  121. public sub md5_hh(a, b, c, d, x, s, ac)

  122. a = addunsigned(a, addunsigned(addunsigned(md5_h(b, c, d), x), ac))

  123. a = rotateleft(a, s)

  124. a = addunsigned(a, b)

  125. end sub

  126. public sub md5_ii(a, b, c, d, x, s, ac)

  127. a = addunsigned(a, addunsigned(addunsigned(md5_i(b, c, d), x), ac))

  128. a = rotateleft(a, s)

  129. a = addunsigned(a, b)

  130. end sub

  131. public function wordtohex(lvalue)

  132. dim lbyte

  133. dim lcount

  134. for lcount = 0 to 3

  135. lbyte = rshift(lvalue, lcount * bits_to_a_byte) and m_lonbits(bits_to_a_byte - 1)

  136. wordtohex = wordtohex & right("0" & hex(lbyte), 2)

  137. next

  138. end function

  139. public function md5(smessage)

  140. m_lonbits(0) = clng(1)

  141. m_lonbits(1) = clng(3)

  142. m_lonbits(2) = clng(7)

  143. m_lonbits(3) = clng(15)

  144. m_lonbits(4) = clng(31)

  145. m_lonbits(5) = clng(63)

  146. m_lonbits(6) = clng(127)

  147. m_lonbits(7) = clng(255)

  148. m_lonbits(8) = clng(511)

  149. m_lonbits(9) = clng(1023)

  150. m_lonbits(10) = clng(2047)

  151. m_lonbits(11) = clng(4095)

  152. m_lonbits(12) = clng(8191)

  153. m_lonbits(13) = clng(16383)

  154. m_lonbits(14) = clng(32767)

  155. m_lonbits(15) = clng(65535)

  156. m_lonbits(16) = clng(131071)

  157. m_lonbits(17) = clng(262143)

  158. m_lonbits(18) = clng(524287)

  159. m_lonbits(19) = clng(1048575)

  160. m_lonbits(20) = clng(2097151)

  161. m_lonbits(21) = clng(4194303)

  162. m_lonbits(22) = clng(8388607)

  163. m_lonbits(23) = clng(16777215)

  164. m_lonbits(24) = clng(33554431)

  165. m_lonbits(25) = clng(67108863)

  166. m_lonbits(26) = clng(134217727)

  167. m_lonbits(27) = clng(268435455)

  168. m_lonbits(28) = clng(536870911)

  169. m_lonbits(29) = clng(1073741823)

  170. m_lonbits(30) = clng(2147483647)

  171. m_l2power(0) = clng(1)

  172. m_l2power(1) = clng(2)

  173. m_l2power(2) = clng(4)

  174. m_l2power(3) = clng(8)

  175. m_l2power(4) = clng(16)

  176. m_l2power(5) = clng(32)

  177. m_l2power(6) = clng(64)

  178. m_l2power(7) = clng(128)

  179. m_l2power(8) = clng(256)

  180. m_l2power(9) = clng(512)

  181. m_l2power(10) = clng(1024)

  182. m_l2power(11) = clng(2048)

  183. m_l2power(12) = clng(4096)

  184. m_l2power(13) = clng(8192)

  185. m_l2power(14) = clng(16384)

  186. m_l2power(15) = clng(32768)

  187. m_l2power(16) = clng(65536)

  188. m_l2power(17) = clng(131072)

  189. m_l2power(18) = clng(262144)

  190. m_l2power(19) = clng(524288)

  191. m_l2power(20) = clng(1048576)

  192. m_l2power(21) = clng(2097152)

  193. m_l2power(22) = clng(4194304)

  194. m_l2power(23) = clng(8388608)

  195. m_l2power(24) = clng(16777216)

  196. m_l2power(25) = clng(33554432)

  197. m_l2power(26) = clng(67108864)

  198. m_l2power(27) = clng(134217728)

  199. m_l2power(28) = clng(268435456)

  200. m_l2power(29) = clng(536870912)

  201. m_l2power(30) = clng(1073741824)

  202. dim x

  203. dim k

  204. dim aa

  205. dim bb

  206. dim cc

  207. dim dd

  208. dim a

  209. dim b

  210. dim c

  211. dim d , e

  212. const s11 = 7

  213. const s12 = 12

  214. const s13 = 17

  215. const s14 = 22

  216. const s21 = 5

  217. const s22 = 9

  218. const s23 = 14

  219. const s24 = 20

  220. const s31 = 4

  221. const s32 = 11

  222. const s33 = 16

  223. const s34 = 23

  224. const s41 = 6

  225. const s42 = 10

  226. const s43 = 15

  227. const s44 = 21

  228. x = converttowordarray(smessage)

  229. a = &h67452301

  230. b = &hefcdab89

  231. c = &h98badcfe

  232. d = &h10325476

  233. for k = 0 to ubound(x) step 16

  234. aa = a

  235. bb = b

  236. cc = c

  237. dd = d

  238. md5_ff a, b, c, d, x(k + 0), s11, &hd76aa478

  239. md5_ff d, a, b, c, x(k + 1), s12, &he8c7b756

  240. md5_ff c, d, a, b, x(k + 2), s13, &h242070db

  241. md5_ff b, c, d, a, x(k + 3), s14, &hc1bdceee

  242. md5_ff a, b, c, d, x(k + 4), s11, &hf57c0faf

  243. md5_ff d, a, b, c, x(k + 5), s12, &h4787c62a

  244. md5_ff c, d, a, b, x(k + 6), s13, &ha8304613

  245. md5_ff b, c, d, a, x(k + 7), s14, &hfd469501

  246. md5_ff a, b, c, d, x(k + 8), s11, &h698098d8

  247. md5_ff d, a, b, c, x(k + 9), s12, &h8b44f7af

  248. md5_ff c, d, a, b, x(k + 10), s13, &hffff5bb1

  249. md5_ff b, c, d, a, x(k + 11), s14, &h895cd7be

  250. md5_ff a, b, c, d, x(k + 12), s11, &h6b901122

  251. md5_ff d, a, b, c, x(k + 13), s12, &hfd987193

  252. md5_ff c, d, a, b, x(k + 14), s13, &ha679438e

  253. md5_ff b, c, d, a, x(k + 15), s14, &h49b40821

  254. md5_gg a, b, c, d, x(k + 1), s21, &hf61e2562

  255. md5_gg d, a, b, c, x(k + 6), s22, &hc040b340

  256. md5_gg c, d, a, b, x(k + 11), s23, &h265e5a51

  257. md5_gg b, c, d, a, x(k + 0), s24, &he9b6c7aa

  258. md5_gg a, b, c, d, x(k + 5), s21, &hd62f105d

  259. md5_gg d, a, b, c, x(k + 10), s22, &h2441453

  260. md5_gg c, d, a, b, x(k + 15), s23, &hd8a1e681

  261. md5_gg b, c, d, a, x(k + 4), s24, &he7d3fbc8

  262. md5_gg a, b, c, d, x(k + 9), s21, &h21e1cde6

  263. md5_gg d, a, b, c, x(k + 14), s22, &hc33707d6

  264. md5_gg c, d, a, b, x(k + 3), s23, &hf4d50d87

  265. md5_gg b, c, d, a, x(k + 8), s24, &h455a14ed

  266. md5_gg a, b, c, d, x(k + 13), s21, &ha9e3e905

  267. md5_gg d, a, b, c, x(k + 2), s22, &hfcefa3f8

  268. md5_gg c, d, a, b, x(k + 7), s23, &h676f02d9

  269. md5_gg b, c, d, a, x(k + 12), s24, &h8d2a4c8a

  270. md5_hh a, b, c, d, x(k + 5), s31, &hfffa3942

  271. md5_hh d, a, b, c, x(k + 8), s32, &h8771f681

  272. md5_hh c, d, a, b, x(k + 11), s33, &h6d9d6122

  273. md5_hh b, c, d, a, x(k + 14), s34, &hfde5380c

  274. md5_hh a, b, c, d, x(k + 1), s31, &ha4beea44

  275. md5_hh d, a, b, c, x(k + 4), s32, &h4bdecfa9

  276. md5_hh c, d, a, b, x(k + 7), s33, &hf6bb4b60

  277. md5_hh b, c, d, a, x(k + 10), s34, &hbebfbc70

  278. md5_hh a, b, c, d, x(k + 13), s31, &h289b7ec6

  279. md5_hh d, a, b, c, x(k + 0), s32, &heaa127fa

  280. md5_hh c, d, a, b, x(k + 3), s33, &hd4ef3085

  281. md5_hh b, c, d, a, x(k + 6), s34, &h4881d05

  282. md5_hh a, b, c, d, x(k + 9), s31, &hd9d4d039

  283. md5_hh d, a, b, c, x(k + 12), s32, &he6db99e5

  284. md5_hh c, d, a, b, x(k + 15), s33, &h1fa27cf8

  285. md5_hh b, c, d, a, x(k + 2), s34, &hc4ac5665

  286. md5_ii a, b, c, d, x(k + 0), s41, &hf4292244

  287. md5_ii d, a, b, c, x(k + 7), s42, &h432aff97

  288. md5_ii c, d, a, b, x(k + 14), s43, &hab9423a7

  289. md5_ii b, c, d, a, x(k + 5), s44, &hfc93a039

  290. md5_ii a, b, c, d, x(k + 12), s41, &h655b59c3

  291. md5_ii d, a, b, c, x(k + 3), s42, &h8f0ccc92

  292. md5_ii c, d, a, b, x(k + 10), s43, &hffeff47d

  293. md5_ii b, c, d, a, x(k + 1), s44, &h85845dd1

  294. md5_ii a, b, c, d, x(k + 8), s41, &h6fa87e4f

  295. md5_ii d, a, b, c, x(k + 15), s42, &hfe2ce6e0

  296. md5_ii c, d, a, b, x(k + 6), s43, &ha3014314

  297. md5_ii b, c, d, a, x(k + 13), s44, &h4e0811a1

  298. md5_ii a, b, c, d, x(k + 4), s41, &hf7537e82

  299. md5_ii d, a, b, c, x(k + 11), s42, &hbd3af235

  300. md5_ii c, d, a, b, x(k + 2), s43, &h2ad7d2bb

  301. md5_ii b, c, d, a, x(k + 9), s44, &heb86d391

  302. a = addunsigned(a, aa)

  303. b = addunsigned(b, bb)

  304. c = addunsigned(c, cc)

  305. d = addunsigned(d, dd)

  306. next

  307. md5 = lcase(wordtohex(a) & wordtohex(b) & wordtohex(c) & wordtohex(d))

  308. 'md5=lcase(wordtohex(b) & wordtohex(c)) 'i crop this to fit 16byte database password :d

  309. md5=ucase(md5)

  310. end function

  311. public function md5_16(smessage)

  312. m_lonbits(0) = clng(1)

  313. m_lonbits(1) = clng(3)

  314. m_lonbits(2) = clng(7)

  315. m_lonbits(3) = clng(15)

  316. m_lonbits(4) = clng(31)

  317. m_lonbits(5) = clng(63)

  318. m_lonbits(6) = clng(127)

  319. m_lonbits(7) = clng(255)

  320. m_lonbits(8) = clng(511)

  321. m_lonbits(9) = clng(1023)

  322. m_lonbits(10) = clng(2047)

  323. m_lonbits(11) = clng(4095)

  324. m_lonbits(12) = clng(8191)

  325. m_lonbits(13) = clng(16383)

  326. m_lonbits(14) = clng(32767)

  327. m_lonbits(15) = clng(65535)

  328. m_lonbits(16) = clng(131071)

  329. m_lonbits(17) = clng(262143)

  330. m_lonbits(18) = clng(524287)

  331. m_lonbits(19) = clng(1048575)

  332. m_lonbits(20) = clng(2097151)

  333. m_lonbits(21) = clng(4194303)

  334. m_lonbits(22) = clng(8388607)

  335. m_lonbits(23) = clng(16777215)

  336. m_lonbits(24) = clng(33554431)

  337. m_lonbits(25) = clng(67108863)

  338. m_lonbits(26) = clng(134217727)

  339. m_lonbits(27) = clng(268435455)

  340. m_lonbits(28) = clng(536870911)

  341. m_lonbits(29) = clng(1073741823)

  342. m_lonbits(30) = clng(2147483647)

  343. m_l2power(0) = clng(1)

  344. m_l2power(1) = clng(2)

  345. m_l2power(2) = clng(4)

  346. m_l2power(3) = clng(8)

  347. m_l2power(4) = clng(16)

  348. m_l2power(5) = clng(32)

  349. m_l2power(6) = clng(64)

  350. m_l2power(7) = clng(128)

  351. m_l2power(8) = clng(256)

  352. m_l2power(9) = clng(512)

  353. m_l2power(10) = clng(1024)

  354. m_l2power(11) = clng(2048)

  355. m_l2power(12) = clng(4096)

  356. m_l2power(13) = clng(8192)

  357. m_l2power(14) = clng(16384)

  358. m_l2power(15) = clng(32768)

  359. m_l2power(16) = clng(65536)

  360. m_l2power(17) = clng(131072)

  361. m_l2power(18) = clng(262144)

  362. m_l2power(19) = clng(524288)

  363. m_l2power(20) = clng(1048576)

  364. m_l2power(21) = clng(2097152)

  365. m_l2power(22) = clng(4194304)

  366. m_l2power(23) = clng(8388608)

  367. m_l2power(24) = clng(16777216)

  368. m_l2power(25) = clng(33554432)

  369. m_l2power(26) = clng(67108864)

  370. m_l2power(27) = clng(134217728)

  371. m_l2power(28) = clng(268435456)

  372. m_l2power(29) = clng(536870912)

  373. m_l2power(30) = clng(1073741824)

  374. dim x

  375. dim k

  376. dim aa

  377. dim bb

  378. dim cc

  379. dim dd

  380. dim a

  381. dim b

  382. dim c

  383. dim d

  384. const s11 = 7

  385. const s12 = 12

  386. const s13 = 17

  387. const s14 = 22

  388. const s21 = 5

  389. const s22 = 9

  390. const s23 = 14

  391. const s24 = 20

  392. const s31 = 4

  393. const s32 = 11

  394. const s33 = 16

  395. const s34 = 23

  396. const s41 = 6

  397. const s42 = 10

  398. const s43 = 15

  399. const s44 = 21

  400. x = converttowordarray(smessage)

  401. a = &h67452301

  402. b = &hefcdab89

  403. c = &h98badcfe

  404. d = &h10325476

  405. for k = 0 to ubound(x) step 16

  406. aa = a

  407. bb = b

  408. cc = c

  409. dd = d

  410. md5_ff a, b, c, d, x(k + 0), s11, &hd76aa478

  411. md5_ff d, a, b, c, x(k + 1), s12, &he8c7b756

  412. md5_ff c, d, a, b, x(k + 2), s13, &h242070db

  413. md5_ff b, c, d, a, x(k + 3), s14, &hc1bdceee

  414. md5_ff a, b, c, d, x(k + 4), s11, &hf57c0faf

  415. md5_ff d, a, b, c, x(k + 5), s12, &h4787c62a

  416. md5_ff c, d, a, b, x(k + 6), s13, &ha8304613

  417. md5_ff b, c, d, a, x(k + 7), s14, &hfd469501

  418. md5_ff a, b, c, d, x(k + 8), s11, &h698098d8

  419. md5_ff d, a, b, c, x(k + 9), s12, &h8b44f7af

  420. md5_ff c, d, a, b, x(k + 10), s13, &hffff5bb1

  421. md5_ff b, c, d, a, x(k + 11), s14, &h895cd7be

  422. md5_ff a, b, c, d, x(k + 12), s11, &h6b901122

  423. md5_ff d, a, b, c, x(k + 13), s12, &hfd987193

  424. md5_ff c, d, a, b, x(k + 14), s13, &ha679438e

  425. md5_ff b, c, d, a, x(k + 15), s14, &h49b40821

  426. md5_gg a, b, c, d, x(k + 1), s21, &hf61e2562

  427. md5_gg d, a, b, c, x(k + 6), s22, &hc040b340

  428. md5_gg c, d, a, b, x(k + 11), s23, &h265e5a51

  429. md5_gg b, c, d, a, x(k + 0), s24, &he9b6c7aa

  430. md5_gg a, b, c, d, x(k + 5), s21, &hd62f105d

  431. md5_gg d, a, b, c, x(k + 10), s22, &h2441453

  432. md5_gg c, d, a, b, x(k + 15), s23, &hd8a1e681

  433. md5_gg b, c, d, a, x(k + 4), s24, &he7d3fbc8

  434. md5_gg a, b, c, d, x(k + 9), s21, &h21e1cde6

  435. md5_gg d, a, b, c, x(k + 14), s22, &hc33707d6

  436. md5_gg c, d, a, b, x(k + 3), s23, &hf4d50d87

  437. md5_gg b, c, d, a, x(k + 8), s24, &h455a14ed

  438. md5_gg a, b, c, d, x(k + 13), s21, &ha9e3e905

  439. md5_gg d, a, b, c, x(k + 2), s22, &hfcefa3f8

  440. md5_gg c, d, a, b, x(k + 7), s23, &h676f02d9

  441. md5_gg b, c, d, a, x(k + 12), s24, &h8d2a4c8a

  442. md5_hh a, b, c, d, x(k + 5), s31, &hfffa3942

  443. md5_hh d, a, b, c, x(k + 8), s32, &h8771f681

  444. md5_hh c, d, a, b, x(k + 11), s33, &h6d9d6122

  445. md5_hh b, c, d, a, x(k + 14), s34, &hfde5380c

  446. md5_hh a, b, c, d, x(k + 1), s31, &ha4beea44

  447. md5_hh d, a, b, c, x(k + 4), s32, &h4bdecfa9

  448. md5_hh c, d, a, b, x(k + 7), s33, &hf6bb4b60

  449. md5_hh b, c, d, a, x(k + 10), s34, &hbebfbc70

  450. md5_hh a, b, c, d, x(k + 13), s31, &h289b7ec6

  451. md5_hh d, a, b, c, x(k + 0), s32, &heaa127fa

  452. md5_hh c, d, a, b, x(k + 3), s33, &hd4ef3085

  453. md5_hh b, c, d, a, x(k + 6), s34, &h4881d05

  454. md5_hh a, b, c, d, x(k + 9), s31, &hd9d4d039

  455. md5_hh d, a, b, c, x(k + 12), s32, &he6db99e5

  456. md5_hh c, d, a, b, x(k + 15), s33, &h1fa27cf8

  457. md5_hh b, c, d, a, x(k + 2), s34, &hc4ac5665

  458. md5_ii a, b, c, d, x(k + 0), s41, &hf4292244

  459. md5_ii d, a, b, c, x(k + 7), s42, &h432aff97

  460. md5_ii c, d, a, b, x(k + 14), s43, &hab9423a7

  461. md5_ii b, c, d, a, x(k + 5), s44, &hfc93a039

  462. md5_ii a, b, c, d, x(k + 12), s41, &h655b59c3

  463. md5_ii d, a, b, c, x(k + 3), s42, &h8f0ccc92

  464. md5_ii c, d, a, b, x(k + 10), s43, &hffeff47d

  465. md5_ii b, c, d, a, x(k + 1), s44, &h85845dd1

  466. md5_ii a, b, c, d, x(k + 8), s41, &h6fa87e4f

  467. md5_ii d, a, b, c, x(k + 15), s42, &hfe2ce6e0

  468. md5_ii c, d, a, b, x(k + 6), s43, &ha3014314

  469. md5_ii b, c, d, a, x(k + 13), s44, &h4e0811a1

  470. md5_ii a, b, c, d, x(k + 4), s41, &hf7537e82

  471. md5_ii d, a, b, c, x(k + 11), s42, &hbd3af235

  472. md5_ii c, d, a, b, x(k + 2), s43, &h2ad7d2bb

  473. md5_ii b, c, d, a, x(k + 9), s44, &heb86d391

  474. a = addunsigned(a, aa)

  475. b = addunsigned(b, bb)

  476. c = addunsigned(c, cc)

  477. d = addunsigned(d, dd)

  478. next

  479. 'md5 = lcase(wordtohex(a) & wordtohex(b) & wordtohex(c) & wordtohex(d))

  480. md5_16=lcase(wordtohex(b) & wordtohex(c)) 'i crop this to fit 16byte database password :d

  481. md5_16=ucase(md5_16)

  482. end function

  483. '---------------------------------Md5 Over

  484. '-----------依然需要使用昨天弄的字符串转 UTF-8 字串函数

  485. Public Function str2UTF8(szInput) '只返回十六进制文本串 -----20200524改合

  486. Dim wch, uch, szRet

  487. Dim x, i

  488. Dim nAsc, nAsc2, nAsc3, s2b()

  489. '如果输入参数为空,则退出函数

  490. If szInput = "" Then

  491. str2UTF8 = szInput

  492. Exit Function

  493. End If

  494. '开始转换

  495. For x = 1 To Len(szInput)

  496. '利用mid函数分拆GB编码文字

  497. wch = Mid(szInput, x, 1)

  498. '利用ascW函数返回每一个GB编码文字的Unicode字符代码

  499. '注:asc函数返回的是ANSI 字符代码,注意区别

  500. nAsc = AscW(wch)

  501. If nAsc < 0 Then

  502. nAsc = nAsc + 65536

  503. End If

  504. If (nAsc And &HFF80) = 0 Then

  505. szRet = szRet & Right("00" & Hex(Asc(wch)), 2)

  506. Else

  507. If (nAsc And &HF000) = 0 Then

  508. uch = Hex(((nAsc \ 64)) Or &HC0) & Hex(nAsc And &H3F Or &H80)

  509. szRet = szRet & uch

  510. Else

  511. 'GB编码文字的Unicode字符代码在0800 - FFFF之间采用三字节模版 , 2 ^ 12=4096 , 2 ^ 6=64

  512. uch = Hex((nAsc \ 4096) Or &HE0) & _

  513. Hex((nAsc \ 64) And &H3F Or &H80) & _

  514. Hex(nAsc And &H3F Or &H80)

  515. szRet = szRet & uch

  516. End If

  517. End If

  518. Next

  519. str2UTF8 = szRet

  520. End Function

  521. '---------------------因为这个过程好几个地方用到,因此将它单独提出来做个独立的函数

  522. Public Function HexStr2ByteArr(hexstr) ' 转换文本型十六进制串为 byte 数组,例:E4B8AD -----20200524改分

  523. Dim i, L, mAllByteIn()

  524. L = Len(hexstr) / 2 - 1

  525. ReDim mAllByteIn(L)

  526. For i = 0 To L

  527. mAllByteIn(i) = CByte("&H" & Mid(hexstr, i * 2 + 1, 2))

  528. Next

  529. HexStr2ByteArr = mAllByteIn

  530. End Function

其中改造了的函数就是 converttowordarray ,这个是将输入的字符串进行处理转换的。

使用例子如下:

msgbox md5("123中文,?αabc") '正确结果应为:2EC80A3192DB1122A1ED5884788C4027

PS:之前,想用 Adodb.Stream 进行 UTF-8 编码转换,但是最后发现 VBS 在内存变量里面的字符串,永远是 unicode 格式,所以,.ReadText 后得到的字符串其实是无效的,改天试试  .Read 。

此记!

VB、VBS 、ASP、VBA 的 UTF-8 MD5 实现相关推荐

  1. VB,VBS,ASP都没有反余弦函数,解决方法:自己写

    今天用到asp由经纬度计算距离,公式来自excel,里面有个ACOS,反余弦,但是运行报错,忽然意识到,VB,VBS,ASP好像都没有反余弦函数,它们的反三角函数只有一个反正切Atn,查来查去,还是回 ...

  2. VB和VBS、VBA的区别及作用

    VB Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种 ...

  3. 牛腩44 整合登陆页 RequiredFieldValidator 和 ValidationSummary 以及 asp.net 自带的MD5 加密...

    在我们后台登陆的时候,有 用户名,密码和验证码3个必选项,所以我们托3个验证控件过来 例如这里,如果没有填写用户名,当点提交的时候,显示 红色的  * 号,并且弹出一个 alert 效果如下     ...

  4. ASP.NET中密码保护,MD5和SHA1算法的使用

    ASP.NET中密码保护,MD5和SHA1算法的使用 你的主页或者你管理的网站有各种密码需要保护,把密码直接放在数据库或者文件中存在不少安全隐患,所以密码加密后存储是最常见的做法.在ASP.NET中实 ...

  5. VBS 与 VBA 的区别

    '■前言 VBA操作Excel很常见, 之前也看到过使用VBS操作Excel,来完成某些自动化处理的代码. 虽然有些类似,但是,VBS 与 VBA 是两种不同的语言. ■VBA 代码运行,基于Exce ...

  6. VB.NET/ASP.NET编码规范(ZT)

    VB.NET/ASP.NET编码规范 在开发中保持良好的编码规范是十分重要的.我所采用的新的VB.NET/ASP.NET编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理.分类的编码规范.采 ...

  7. 自学Web开发第十二天-基于VB和ASP.NET;页面嵌套、母版、网站导航

    自学Web开发第十二天-基于VB和ASP.NET:页面嵌套.母版.网站导航 页面嵌套 母版页 母版页的建立和使用 访问母版页上的元素 网站导航 站点地图 SiteMapDataSource控件 地图信 ...

  8. 自学Web开发第十四天-基于VB和ASP.NET;丰富数据呈现:TreeView控件的使用及与GridView控件联动,深入研究从GridView中取数据

    自学Web开发第十四天-基于VB和ASP.NET:丰富数据呈现:TreeView控件的使用及与GridView控件联动,深入研究从GridView中取数据 GridView操作数据库后,刷新TreeV ...

  9. [ASP,VB] - 利用ASP调用API COM接口实现开关机

    来源:http://www.111cn.net/asp/3/35f5b04c0c9f40c9f03a1b56d641ac3f.htm 服务器脚本要控制些开关机命令模式的知都要调用win api接口来实 ...

  10. VBS和VBA初步(一)

    文章目录 vbs 1.基本语法 1.1 所有变量需要显式声明 1.2 弹出"你好,世界"对话框 1.3 定义一个变量 1.4 加减乘除 1.5 On Error Resume Ne ...

最新文章

  1. 给算法工程师和研究员的「霸王餐」| 附招聘信息
  2. 在 Windows Server 2008 中通过组策略向计算机或用户部署网络打印机
  3. unity发布webgl 触摸控制和鼠标控制冲突问题解决
  4. C语言-宏定义#define的用法
  5. 1013 Battle Over Cities (25 分) 【难度: 中 / 知识点: 连通块】
  6. Java防止Xss注入json_浅谈 React 中的 XSS 攻击
  7. 遍历二维数组_Java编程基础阶段笔记 day06 二维数组
  8. ghelper怎么在手机上用_当长时间不用手机玩《崩坏3》、《战双》
  9. 转行python能拿到多少钱_想转行学python过来人提醒大家几点
  10. 进程控制块PCB简介
  11. Python数据结构与算法笔记(七):数据结构——队列,链表和哈希表
  12. 巧用clear:both
  13. BI(商务智能)系统简介
  14. android studio创建和安装虚拟机
  15. 重磅:使用UOS微信桌面版协议登录,wechaty免费版web协议重放荣光
  16. coverity代码检测工具介绍_Coverity功能介绍
  17. 实验环境的搭建以及异或门的设计仿真实验
  18. 世界上首位程序员Ada
  19. 5G网优工程师需要会使用哪些软件?Mapinfo是必要!
  20. ffmpeg av_read_frame函数解析

热门文章

  1. 关于App置灰黑白化的探索
  2. VirtualBox-ubuntu系统下挂载U盘
  3. 阿里云负载均衡白名单自动修改脚本
  4. 学习ZARA模式要从老板观念转变开始
  5. 如何检测、清理Greenplum膨胀、垃圾
  6. Windows驱动_WSK驱动之四WSK例程
  7. 门后的秘密-读书笔记
  8. Java基础知识(二)—— API文档
  9. oracle OEM 13C for linux
  10. [Android]如何做一个崩溃率少于千分之三噶应用app(17)-组件化SDK