PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/website/source/php/strings/md5.html

https://github.com/andriuspetrauskis/phpjs
HTML | 286 lines | 266 code | 20 blank | 0 comment | 0 complexity | 5a8ba6c5a4f84149619361c7faae9876 MD5 | raw file
  1. ---
  2. warning: 'This file is auto generated by `npm run web:inject`, do not edit by hand'
  3. examples:
  4. - md5('Kevin van Zonneveld')
  5. estarget: es5
  6. returns:
  7. - '''6e658d4bfcb59cc13f96c14450ac40b9'''
  8. dependencies: []
  9. authors:
  10. original by:
  11. - 'Webtoolkit.info (http://www.webtoolkit.info/)'
  12. improved by:
  13. - 'Michael White (http://getsprink.com)'
  14. - Jack
  15. - 'Kevin van Zonneveld (http://kvz.io)'
  16. bugfixed by:
  17. - 'Kevin van Zonneveld (http://kvz.io)'
  18. input by:
  19. - 'Brett Zamir (http://brett-zamir.me)'
  20. notes:
  21. - >-
  22. Keep in mind that in accordance with PHP, the whole string is buffered and
  23. then
  24. hashed. If available, we'd recommend using Node's native crypto modules
  25. directly
  26. in a steaming fashion for faster and more efficient hashing
  27. type: function
  28. layout: function
  29. title: PHP's md5 in JavaScript
  30. description: >-
  31. Heres what our current JavaScript equivalent to <a
  32. href="http://php.net/manual/en/function.md5.php">PHP's md5</a> looks like.
  33. function: md5
  34. category: strings
  35. language: php
  36. permalink: php/strings/md5/
  37. alias:
  38. - /functions/php/md5/
  39. - /functions/strings/md5/
  40. - /php/md5/
  41. - /functions/md5/
  42. ---
  43. {% codeblock lang:javascript %}module.exports = function md5 (str) {
  44. // discuss at: http://locutus.io/php/md5/
  45. // original by: Webtoolkit.info (http://www.webtoolkit.info/)
  46. // improved by: Michael White (http://getsprink.com)
  47. // improved by: Jack
  48. // improved by: Kevin van Zonneveld (http://kvz.io)
  49. // input by: Brett Zamir (http://brett-zamir.me)
  50. // bugfixed by: Kevin van Zonneveld (http://kvz.io)
  51. // note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then
  52. // note 1: hashed. If available, we'd recommend using Node's native crypto modules directly
  53. // note 1: in a steaming fashion for faster and more efficient hashing
  54. // example 1: md5('Kevin van Zonneveld')
  55. // returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
  56. var hash
  57. try {
  58. var crypto = require('crypto')
  59. var md5sum = crypto.createHash('md5')
  60. md5sum.update(str)
  61. hash = md5sum.digest('hex')
  62. } catch (e) {
  63. hash = undefined
  64. }
  65. if (hash !== undefined) {
  66. return hash
  67. }
  68. var utf8Encode = require('../xml/utf8_encode')
  69. var xl
  70. var _rotateLeft = function (lValue, iShiftBits) {
  71. return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits))
  72. }
  73. var _addUnsigned = function (lX, lY) {
  74. var lX4, lY4, lX8, lY8, lResult
  75. lX8 = (lX & 0x80000000)
  76. lY8 = (lY & 0x80000000)
  77. lX4 = (lX & 0x40000000)
  78. lY4 = (lY & 0x40000000)
  79. lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF)
  80. if (lX4 & lY4) {
  81. return (lResult ^ 0x80000000 ^ lX8 ^ lY8)
  82. }
  83. if (lX4 | lY4) {
  84. if (lResult & 0x40000000) {
  85. return (lResult ^ 0xC0000000 ^ lX8 ^ lY8)
  86. } else {
  87. return (lResult ^ 0x40000000 ^ lX8 ^ lY8)
  88. }
  89. } else {
  90. return (lResult ^ lX8 ^ lY8)
  91. }
  92. }
  93. var _F = function (x, y, z) {
  94. return (x & y) | ((~x) & z)
  95. }
  96. var _G = function (x, y, z) {
  97. return (x & z) | (y & (~z))
  98. }
  99. var _H = function (x, y, z) {
  100. return (x ^ y ^ z)
  101. }
  102. var _I = function (x, y, z) {
  103. return (y ^ (x | (~z)))
  104. }
  105. var _FF = function (a, b, c, d, x, s, ac) {
  106. a = _addUnsigned(a, _addUnsigned(_addUnsigned(_F(b, c, d), x), ac))
  107. return _addUnsigned(_rotateLeft(a, s), b)
  108. }
  109. var _GG = function (a, b, c, d, x, s, ac) {
  110. a = _addUnsigned(a, _addUnsigned(_addUnsigned(_G(b, c, d), x), ac))
  111. return _addUnsigned(_rotateLeft(a, s), b)
  112. }
  113. var _HH = function (a, b, c, d, x, s, ac) {
  114. a = _addUnsigned(a, _addUnsigned(_addUnsigned(_H(b, c, d), x), ac))
  115. return _addUnsigned(_rotateLeft(a, s), b)
  116. }
  117. var _II = function (a, b, c, d, x, s, ac) {
  118. a = _addUnsigned(a, _addUnsigned(_addUnsigned(_I(b, c, d), x), ac))
  119. return _addUnsigned(_rotateLeft(a, s), b)
  120. }
  121. var _convertToWordArray = function (str) {
  122. var lWordCount
  123. var lMessageLength = str.length
  124. var lNumberOfWordsTemp1 = lMessageLength + 8
  125. var lNumberOfWordsTemp2 = (lNumberOfWordsTemp1 - (lNumberOfWordsTemp1 % 64)) / 64
  126. var lNumberOfWords = (lNumberOfWordsTemp2 + 1) * 16
  127. var lWordArray = new Array(lNumberOfWords - 1)
  128. var lBytePosition = 0
  129. var lByteCount = 0
  130. while (lByteCount < lMessageLength) {
  131. lWordCount = (lByteCount - (lByteCount % 4)) / 4
  132. lBytePosition = (lByteCount % 4) * 8
  133. lWordArray[lWordCount] = (lWordArray[lWordCount] |
  134. (str.charCodeAt(lByteCount) << lBytePosition))
  135. lByteCount++
  136. }
  137. lWordCount = (lByteCount - (lByteCount % 4)) / 4
  138. lBytePosition = (lByteCount % 4) * 8
  139. lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition)
  140. lWordArray[lNumberOfWords - 2] = lMessageLength << 3
  141. lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29
  142. return lWordArray
  143. }
  144. var _wordToHex = function (lValue) {
  145. var wordToHexValue = ''
  146. var wordToHexValueTemp = ''
  147. var lByte
  148. var lCount
  149. for (lCount = 0; lCount <= 3; lCount++) {
  150. lByte = (lValue >>> (lCount * 8)) & 255
  151. wordToHexValueTemp = '0' + lByte.toString(16)
  152. wordToHexValue = wordToHexValue + wordToHexValueTemp.substr(wordToHexValueTemp.length - 2, 2)
  153. }
  154. return wordToHexValue
  155. }
  156. var x = []
  157. var k
  158. var AA
  159. var BB
  160. var CC
  161. var DD
  162. var a
  163. var b
  164. var c
  165. var d
  166. var S11 = 7
  167. var S12 = 12
  168. var S13 = 17
  169. var S14 = 22
  170. var S21 = 5
  171. var S22 = 9
  172. var S23 = 14
  173. var S24 = 20
  174. var S31 = 4
  175. var S32 = 11
  176. var S33 = 16
  177. var S34 = 23
  178. var S41 = 6
  179. var S42 = 10
  180. var S43 = 15
  181. var S44 = 21
  182. str = utf8Encode(str)
  183. x = _convertToWordArray(str)
  184. a = 0x67452301
  185. b = 0xEFCDAB89
  186. c = 0x98BADCFE
  187. d = 0x10325476
  188. xl = x.length
  189. for (k = 0; k < xl; k += 16) {
  190. AA = a
  191. BB = b
  192. CC = c
  193. DD = d
  194. a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478)
  195. d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756)
  196. c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB)
  197. b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE)
  198. a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF)
  199. d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A)
  200. c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613)
  201. b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501)
  202. a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8)
  203. d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF)
  204. c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1)
  205. b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE)
  206. a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122)
  207. d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193)
  208. c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E)
  209. b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821)
  210. a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562)
  211. d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340)
  212. c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51)
  213. b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA)
  214. a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D)
  215. d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453)
  216. c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681)
  217. b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8)
  218. a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6)
  219. d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6)
  220. c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87)
  221. b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED)
  222. a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905)
  223. d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8)
  224. c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9)
  225. b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A)
  226. a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942)
  227. d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681)
  228. c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122)
  229. b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C)
  230. a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44)
  231. d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9)
  232. c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60)
  233. b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70)
  234. a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6)
  235. d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA)
  236. c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085)
  237. b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05)
  238. a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039)
  239. d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5)
  240. c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8)
  241. b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665)
  242. a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244)
  243. d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97)
  244. c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7)
  245. b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039)
  246. a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3)
  247. d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92)
  248. c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D)
  249. b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1)
  250. a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F)
  251. d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0)
  252. c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314)
  253. b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1)
  254. a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82)
  255. d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235)
  256. c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB)
  257. b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391)
  258. a = _addUnsigned(a, AA)
  259. b = _addUnsigned(b, BB)
  260. c = _addUnsigned(c, CC)
  261. d = _addUnsigned(d, DD)
  262. }
  263. var temp = _wordToHex(a) + _wordToHex(b) + _wordToHex(c) + _wordToHex(d)
  264. return temp.toLowerCase()
  265. }
  266. {% endcodeblock %}