当前位置:K88软件开发文章中心编程语言SQLSQL01 → 文章内容

在sql语句中实现md5功能

减小字体 增大字体 作者:wangsdong     来源:asp编程网  发布时间:2018-12-30 9:13:35

最近在做主站会员与discuz论坛会员整合的时候,遇到一个这样的问题
主站会员密码没有加密,而论坛会员要求加密。现在要将主站的会员导入到论坛中去,所以要给它加密。但是现在的问题是我的会员量太大,如果写个程序去导入,时间会很长,但程序又会出超时,如果直接在sql server中的有md5功能就好办了。直接在数据库中运行一下就行了。
在网上找了一段时间,找到了这个函数,终于实现了这个功能。
代码如下:
 

  1. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_m_OnBits]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  2. DROP 
    FUNCTION 
    [dbo].[MD5_m_OnBits] 
     
  3. GO 
     
  4. /***************************************************************************** 
     

  5. Name: 
    MD5_m_OnBits 
     

  6. Description: 
    常数组 
     
  7. *****************************************************************************/ 
     
  8. CREATE 
    FUNCTION 
    dbo.MD5_m_OnBits( 
     
  9. @i 
    TINYINT 
     

  10.  
  11. RETURNS 
    INT 
     
  12. WITH 
    ENCRYPTION 
     
  13. AS 
     
  14. BEGIN 
     
  15. DECLARE 
    @iRes 
    INT 
     
  16. SELECT 
    @iRes 

     
  17. CASE 
    @i 
     
  18. WHEN 

    THEN 

    -- 
    00000000000000000000000000000001 
     
  19.  
  20. WHEN 

    THEN 

    -- 
    00000000000000000000000000000011 
     
  21.  
  22. WHEN 

    THEN 

    -- 
    00000000000000000000000000000111 
     
  23.  
  24. WHEN 

    THEN 
    15 
    -- 
    00000000000000000000000000001111 
     
  25.  
  26. WHEN 

    THEN 
    31 
    -- 
    00000000000000000000000000011111 
     
  27.  
  28. WHEN 

    THEN 
    63 
    -- 
    00000000000000000000000000111111 
     
  29.  
  30. WHEN 

    THEN 
    127 
    -- 
    00000000000000000000000001111111 
     
  31.  
  32. WHEN 

    THEN 
    255 
    -- 
    00000000000000000000000011111111 
     
  33.  
  34. WHEN 

    THEN 
    511 
    -- 
    00000000000000000000000111111111 
     
  35.  
  36. WHEN 

    THEN 
    1023 
    -- 
    00000000000000000000001111111111 
     
  37.  
  38. WHEN 
    10 
    THEN 
    2047 
    -- 
    00000000000000000000011111111111 
     
  39.  
  40. WHEN 
    11 
    THEN 
    4095 
    -- 
    00000000000000000000111111111111 
     
  41.  
  42. WHEN 
    12 
    THEN 
    8191 
    -- 
    00000000000000000001111111111111 
     
  43.  
  44. WHEN 
    13 
    THEN 
    16383 
    -- 
    00000000000000000011111111111111 
     
  45.  
  46. WHEN 
    14 
    THEN 
    32767 
    -- 
    00000000000000000111111111111111 
     
  47.  
  48. WHEN 
    15 
    THEN 
    65535 
    -- 
    00000000000000001111111111111111 
     
  49.  
  50. WHEN 
    16 
    THEN 
    131071 
    -- 
    00000000000000011111111111111111 
     
  51.  
  52. WHEN 
    17 
    THEN 
    262143 
    -- 
    00000000000000111111111111111111 
     
  53.  
  54. WHEN 
    18 
    THEN 
    524287 
    -- 
    00000000000001111111111111111111 
     
  55.  
  56. WHEN 
    19 
    THEN 
    1048575 
    -- 
    00000000000011111111111111111111 
     
  57.  
  58. WHEN 
    20 
    THEN 
    2097151 
    -- 
    00000000000111111111111111111111 
     
  59.  
  60. WHEN 
    21 
    THEN 
    4194303 
    -- 
    00000000001111111111111111111111 
     
  61.  
  62. WHEN 
    22 
    THEN 
    8388607 
    -- 
    00000000011111111111111111111111 
     
  63.  
  64. WHEN 
    23 
    THEN 
    16777215 
    -- 
    00000000111111111111111111111111 
     
  65.  
  66. WHEN 
    24 
    THEN 
    33554431 
    -- 
    00000001111111111111111111111111 
     
  67.  
  68. WHEN 
    25 
    THEN 
    67108863 
    -- 
    00000011111111111111111111111111 
     
  69.  
  70. WHEN 
    26 
    THEN 
    134217727 
    -- 
    00000111111111111111111111111111 
     
  71.  
  72. WHEN 
    27 
    THEN 
    268435455 
    -- 
    00001111111111111111111111111111 
     
  73.  
  74. WHEN 
    28 
    THEN 
    536870911 
    -- 
    00011111111111111111111111111111 
     
  75.  
  76. WHEN 
    29 
    THEN 
    1073741823 
    -- 
    00111111111111111111111111111111 
     
  77.  
  78. WHEN 
    30 
    THEN 
    2147483647 
    -- 
    01111111111111111111111111111111 
     
  79.  
  80. ELSE 

     
  81. END 
     
  82. RETURN(@iRes) 
     
  83. END 
     
  84. GO 
     
  85. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_m_2Power]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  86. DROP 
    FUNCTION 
    [dbo].[MD5_m_2Power] 
     
  87. GO 
     
  88. /***************************************************************************** 
     

  89. Name: 
    MD5_m_2Power 
     

  90. Description: 
    常数组 
     
  91. *****************************************************************************/ 
     
  92. CREATE 
    FUNCTION 
    dbo.MD5_m_2Power( 
     
  93. @i 
    TINYINT 
     

  94.  
  95. RETURNS 
    INT 
     
  96. WITH 
    ENCRYPTION 
     
  97. AS 
     
  98. BEGIN 
     
  99. DECLARE 
    @iRes 
    INT 
     
  100. SELECT 
    @iRes 

     
  101. CASE 
    @i 
     
  102. WHEN 

    THEN 

    -- 
    00000000000000000000000000000001 
     
  103.  
  104. WHEN 

    THEN 

    -- 
    00000000000000000000000000000010 
     
  105.  
  106. WHEN 

    THEN 

    -- 
    00000000000000000000000000000100 
     
  107.  
  108. WHEN 

    THEN 

    -- 
    00000000000000000000000000001000 
     
  109.  
  110. WHEN 

    THEN 
    16 
    -- 
    00000000000000000000000000010000 
     
  111.  
  112. WHEN 

    THEN 
    32 
    -- 
    00000000000000000000000000100000 
     
  113.  
  114. WHEN 

    THEN 
    64 
    -- 
    00000000000000000000000001000000 
     
  115.  
  116. WHEN 

    THEN 
    128 
    -- 
    00000000000000000000000010000000 
     
  117.  
  118. WHEN 

    THEN 
    256 
    -- 
    00000000000000000000000100000000 
     
  119.  
  120. WHEN 

    THEN 
    512 
    -- 
    00000000000000000000001000000000 
     
  121.  
  122. WHEN 
    10 
    THEN 
    1024 
    -- 
    00000000000000000000010000000000 
     
  123.  
  124. WHEN 
    11 
    THEN 
    2048 
    -- 
    00000000000000000000100000000000 
     
  125.  
  126. WHEN 
    12 
    THEN 
    4096 
    -- 
    00000000000000000001000000000000 
     
  127.  
  128. WHEN 
    13 
    THEN 
    8192 
    -- 
    00000000000000000010000000000000 
     
  129.  
  130. WHEN 
    14 
    THEN 
    16384 
    -- 
    00000000000000000100000000000000 
     
  131.  
  132. WHEN 
    15 
    THEN 
    32768 
    -- 
    00000000000000001000000000000000 
     
  133.  
  134. WHEN 
    16 
    THEN 
    65536 
    -- 
    00000000000000010000000000000000 
     
  135.  
  136. WHEN 
    17 
    THEN 
    131072 
    -- 
    00000000000000100000000000000000 
     
  137.  
  138. WHEN 
    18 
    THEN 
    262144 
    -- 
    00000000000001000000000000000000 
     
  139.  
  140. WHEN 
    19 
    THEN 
    524288 
    -- 
    00000000000010000000000000000000 
     
  141.  
  142. WHEN 
    20 
    THEN 
    1048576 
    -- 
    00000000000100000000000000000000 
     
  143.  
  144. WHEN 
    21 
    THEN 
    2097152 
    -- 
    00000000001000000000000000000000 
     
  145.  
  146. WHEN 
    22 
    THEN 
    4194304 
    -- 
    00000000010000000000000000000000 
     
  147.  
  148. WHEN 
    23 
    THEN 
    8388608 
    -- 
    00000000100000000000000000000000 
     
  149.  
  150. WHEN 
    24 
    THEN 
    16777216 
    -- 
    00000001000000000000000000000000 
     
  151.  
  152. WHEN 
    25 
    THEN 
    33554432 
    -- 
    00000010000000000000000000000000 
     
  153.  
  154. WHEN 
    26 
    THEN 
    67108864 
    -- 
    00000100000000000000000000000000 
     
  155.  
  156. WHEN 
    27 
    THEN 
    134217728 
    -- 
    00001000000000000000000000000000 
     
  157.  
  158. WHEN 
    28 
    THEN 
    268435456 
    -- 
    00010000000000000000000000000000 
     
  159.  
  160. WHEN 
    29 
    THEN 
    536870912 
    -- 
    00100000000000000000000000000000 
     
  161.  
  162. WHEN 
    30 
    THEN 
    1073741824 
    -- 
    01000000000000000000000000000000 
     
  163.  
  164. ELSE 

     
  165. END 
     
  166. RETURN(@iRes) 
     
  167. END 
     
  168. GO 
     
  169. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_LShift]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  170. DROP 
    FUNCTION 
    [dbo].[MD5_LShift] 
     
  171. GO 
     
  172. /***************************************************************************** 
     

  173. Name: 
    MD5_LShift 
     

  174. Description: 
    MD5_LShift 
     
  175. *****************************************************************************/ 
     
  176. CREATE 
    FUNCTION 
    dbo.MD5_LShift( 
     
  177. @ivalue 
    INT 
     
  178. ,@iShiftBits 
    TINYINT 
     

  179.  
  180. RETURNS 
    INT 
     
  181. WITH 
    ENCRYPTION 
     
  182. AS 
     
  183. BEGIN 
     
  184. DECLARE 
    @iRes 
    BIGINT 
     
  185. SET 
    @iRes 

    CAST(@ivalue 
    AS 
    BINARY(8)) 
     
  186. SET 
    @iRes 

    @iRes 

    dbo.MD5_m_2Power(@iShiftBits) 
     
  187. RETURN(CAST(@iRes 
    &
     
    0x00000000FFFFFFFF 
    AS 
    BINARY(4))) 
     
  188. END 
     
  189. GO 
     
  190. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_RShift]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  191. DROP 
    FUNCTION 
    [dbo].[MD5_RShift] 
     
  192. GO 
     
  193. /***************************************************************************** 
     

  194. Name: 
    MD5_RShift 
     

  195. Description: 
    MD5_RShift 
     
  196. *****************************************************************************/ 
     
  197. CREATE 
    FUNCTION 
    dbo.MD5_RShift( 
     
  198. @ivalue 
    INT 
     
  199. ,@iShiftBits 
    TINYINT 
     

  200.  
  201. RETURNS 
    INT 
     
  202. WITH 
    ENCRYPTION 
     
  203. AS 
     
  204. BEGIN 
     
  205. DECLARE 
    @iRes 
    BIGINT 
     
  206. SET 
    @iRes 

    CAST(@ivalue 
    AS 
    BINARY(8)) 
     
  207. SET 
    @iRes 

    @iRes 

    dbo.MD5_m_2Power(@iShiftBits) 
     
  208. RETURN(CAST(@iRes 
    &
     
    0x00000000FFFFFFFF 
    AS 
    BINARY(4))) 
     
  209. END 
     
  210. GO 
     
  211. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_RotateLeft]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  212. DROP 
    FUNCTION 
    [dbo].[MD5_RotateLeft] 
     
  213. GO 
     
  214. /***************************************************************************** 
     

  215. Name: 
    MD5_RotateLeft 
     

  216. Description: 
    MD5_RotateLeft 
     
  217. *****************************************************************************/ 
     
  218. CREATE 
    FUNCTION 
    dbo.MD5_RotateLeft( 
     
  219. @ivalue 
    INT 
     
  220. ,@iShiftBits 
    TINYINT 
     

  221.  
  222. RETURNS 
    INT 
     
  223. WITH 
    ENCRYPTION 
     
  224. AS 
     
  225. BEGIN 
     
  226. RETURN(dbo.MD5_LShift(@ivalue, 
    @iShiftBits) 

    dbo.MD5_RShift(@ivalue, 
    (32 

    @iShiftBits))) 
     
  227. END 
     
  228. GO 
     
  229. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_AddUnsigned]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  230. DROP 
    FUNCTION 
    [dbo].[MD5_AddUnsigned] 
     
  231. GO 
     
  232. /***************************************************************************** 
     

  233. Name: 
    MD5_AddUnsigned 
     

  234. Description: 
    MD5_AddUnsigned 
     
  235. *****************************************************************************/ 
     
  236. CREATE 
    FUNCTION 
    dbo.MD5_AddUnsigned( 
     
  237. @iX 
    INT 
     
  238. ,@iY 
    INT 
     

  239.  
  240. RETURNS 
    INT 
     
  241. WITH 
    ENCRYPTION 
     
  242. AS 
     
  243. BEGIN 
     
  244. DECLARE 
    @iRes 
    BIGINT 
     
  245. SET 
    @iRes 

    CAST(CAST(@iX 
    AS 
    BINARY(8)) 
    AS 
    BIGINT) 

    CAST(CAST(@iY 
    AS 
    BINARY(8)) 
    AS 
    BIGINT) 
     
  246. RETURN(CAST(@iRes 
    &
     
    0x00000000FFFFFFFF 
    AS 
    BINARY(4))) 
     
  247. END 
     
  248. GO 
     
  249. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_F]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  250. DROP 
    FUNCTION 
    [dbo].[MD5_F] 
     
  251. GO 
     
  252. /***************************************************************************** 
     

  253. Name: 
    MD5_F 
     

  254. Description: 
    MD5_F 
     
  255. *****************************************************************************/ 
     
  256. CREATE 
    FUNCTION 
    dbo.MD5_F( 
     
  257. @x 
    INT 
     
  258. ,@y 
    INT 
     
  259. ,@z 
    INT 
     

  260.  
  261. RETURNS 
    INT 
     
  262. WITH 
    ENCRYPTION 
     
  263. AS 
     
  264. BEGIN 
     
  265. RETURN((@x 
    &
     
    @y) 

    ((~@x) 
    &
     
    @z)) 
     
  266. END 
     
  267. GO 
     
  268. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_G]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  269. DROP 
    FUNCTION 
    [dbo].[MD5_G] 
     
  270. GO 
     
  271. /***************************************************************************** 
     

  272. Name: 
    MD5_G 
     

  273. Description: 
    MD5_G 
     
  274. *****************************************************************************/ 
     
  275. CREATE 
    FUNCTION 
    dbo.MD5_G( 
     
  276. @x 
    INT 
     
  277. ,@y 
    INT 
     
  278. ,@z 
    INT 
     

  279.  
  280. RETURNS 
    INT 
     
  281. WITH 
    ENCRYPTION 
     
  282. AS 
     
  283. BEGIN 
     
  284. RETURN((@x 
    &
     
    @z) 

    (@y 
    &
     
    (~@z))) 
     
  285. END 
     
  286. GO 
     
  287. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_H]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  288. DROP 
    FUNCTION 
    [dbo].[MD5_H] 
     
  289. GO 
     
  290. /***************************************************************************** 
     

  291. Name: 
    MD5_H 
     

  292. Description: 
    MD5_H 
     
  293. *****************************************************************************/ 
     
  294. CREATE 
    FUNCTION 
    dbo.MD5_H( 
     
  295. @x 
    INT 
     
  296. ,@y 
    INT 
     
  297. ,@z 
    INT 
     

  298.  
  299. RETURNS 
    INT 
     
  300. WITH 
    ENCRYPTION 
     
  301. AS 
     
  302. BEGIN 
     
  303. RETURN(@x 

    @y 

    @z) 
     
  304. END 
     
  305. GO 
     
  306. IF 
    EXISTS(SELECT 

    FROM 
    dbo.sysobjects 
    WHERE 
    id 

    OBJECT_ID(N
    '[dbo].[MD5_I]'
    AND 
    xtype 
    IN(N'FN'
    N
    'IF'
    N
    'TF')) 
     
  307. DROP 
    FUNCTION 
    [dbo].[MD5_I] 
     
  308. GO 
     
  309. /***************************************************************************** 
     

  310. Name: 
    MD5_I 
     

  311. Description: 
    MD5_I 
     
  312. *****************************************************************************/ 
     
  313. CREATE 
    FUNCTION 
    dbo.MD5_I( 
     
  314. @x 
    INT 
     
  315. ,@y 
    INT 
     
  316. ,@z 
    INT 
     

  317.  
  318. RETURNS 
    INT 
     
  319. WITH 
    ENCRYPTION 
     
  320. AS 
     
  321. BEGIN 
     

在sql语句中实现md5功能