当前位置:asp编程网>技术教程>Database教程>  正文

在sql语句中实现md5功能

1970-01-01 08:00:00   来源:www.aspprogram.cn    作者:wangsdong   浏览量:2106   收藏

最近在做主站会员与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 0 THEN 1 -- 00000000000000000000000000000001  
  19.  
  20. WHEN 1 THEN 3 -- 00000000000000000000000000000011  
  21.  
  22. WHEN 2 THEN 7 -- 00000000000000000000000000000111  
  23.  
  24. WHEN 3 THEN 15 -- 00000000000000000000000000001111  
  25.  
  26. WHEN 4 THEN 31 -- 00000000000000000000000000011111  
  27.  
  28. WHEN 5 THEN 63 -- 00000000000000000000000000111111  
  29.  
  30. WHEN 6 THEN 127 -- 00000000000000000000000001111111  
  31.  
  32. WHEN 7 THEN 255 -- 00000000000000000000000011111111  
  33.  
  34. WHEN 8 THEN 511 -- 00000000000000000000000111111111  
  35.  
  36. WHEN 9 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 0  
  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 0 THEN 1 -- 00000000000000000000000000000001  
  103.  
  104. WHEN 1 THEN 2 -- 00000000000000000000000000000010  
  105.  
  106. WHEN 2 THEN 4 -- 00000000000000000000000000000100  
  107.  
  108. WHEN 3 THEN 8 -- 00000000000000000000000000001000  
  109.  
  110. WHEN 4 THEN 16 -- 00000000000000000000000000010000  
  111.  
  112. WHEN 5 THEN 32 -- 00000000000000000000000000100000  
  113.  
  114. WHEN 6 THEN 64 -- 00000000000000000000000001000000  
  115.  
  116. WHEN 7 THEN 128 -- 00000000000000000000000010000000  
  117.  
  118. WHEN 8 THEN 256 -- 00000000000000000000000100000000  
  119.  
  120. WHEN 9 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 0  
  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  
Copyright(C)2013-2017版权所属asp编程网