开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 22309|回复: 89
收起左侧

[易源码分享] 纯数值计算实现sha1,MD5,sha256,RC4,HMAC 等等(只用加减乘除和位运算)

[复制链接]
头像被屏蔽
结帖率:14% (1/7)
发表于 2015-10-20 05:13:34 | 显示全部楼层 |阅读模式   湖北省孝感市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
  
子程序名返回值类型公开备 注
binb_sha256  
参数名类 型参考可空数组备 注
m整数型
l整数型
return整数型
变量名类 型静态数组备 注
sha256_K整数型0
HASH整数型0
W整数型64
a整数型 
b整数型 
c整数型 
d整数型 
e整数型 
f整数型 
g整数型 
h整数型 
i整数型 
j整数型 
T1整数型 
T2整数型 
tmp整数型 
mlength整数型 
sha256_K = { 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998 }
HASH = { 1779033703, -1150833019, 1013904242, -1521486534, 1359893119, -1694144372, 528734635, 1541459225 }
tmp = 左移 (右移 (l + 64, 9), 4) + 16
mlength = 取数组成员数 (m)
如果真 (mlength < tmp)
重定义数组 (m, 真, tmp)
m [右移 (l, 5) + 1]位或 (m [右移 (l, 5) + 1], 左移 (128, 24 - l % 32))
m [tmp] = l
mlength = 取数组成员数 (m)
变量循环首 (0, mlength, 16, i)
如果真 (i ≥ mlength)
跳出循环 ()

a = HASH [1]
b = HASH [2]
c = HASH [3]
d = HASH [4]
e = HASH [5]
f = HASH [6]
g = HASH [7]
h = HASH [8]
变量循环首 (0, 64, 1, j)
如果真 (j ≥ 64)
跳出循环 ()

如果 (j < 16)
W [j + 1] = m [j + i + 1]
W [j + 1]safe_add (safe_add (safe_add (sha256_Gamma1256 (W [j - 2 + 1]), W [j - 7 + 1]), sha256_Gamma0256 (W [j - 15 + 1])), W [j - 16 + 1])

T1 = safe_add (safe_add (safe_add (safe_add (h, sha256_Sigma1256 (e)), sha256_Ch (e, f, g)), sha256_K [j + 1]), W [j + 1])
T2 = safe_add (sha256_Sigma0256 (a), sha256_Maj (a, b, c))
h = g
g = f
f = e
e = safe_add (d, T1)
d = c
c = b
b = a
a = safe_add (T1, T2)
变量循环尾 ()
HASH [1]safe_add (a, HASH [1])
HASH [2]safe_add (b, HASH [2])
HASH [3]safe_add (c, HASH [3])
HASH [4]safe_add (d, HASH [4])
HASH [5]safe_add (e, HASH [5])
HASH [6]safe_add (f, HASH [6])
HASH [7]safe_add (g, HASH [7])
HASH [8]safe_add (h, HASH [8])
变量循环尾 ()
return = HASH
  
子程序名返回值类型公开备 注
binb_sha1  
参数名类 型参考可空数组备 注
x整数型
len整数型
return整数型
变量名类 型静态数组备 注
w整数型80
a整数型 
b整数型 
c整数型 
d整数型 
e整数型 
i整数型 
xlength整数型 
olda整数型 
oldb整数型 
oldc整数型 
oldd整数型 
olde整数型 
j整数型 
t整数型 
ret文本型 
tmp整数型 
xlength = 取数组成员数 (x)
tmp = 左移 (右移 (len + 64, 9), 4) + 16
如果真 (xlength < tmp)
重定义数组 (x, 真, tmp)

x [右移 (len, 5) + 1]位或 (x [右移 (len, 5) + 1], 左移 (128, 24 - len % 32))
x [左移 (右移 (len + 64, 9), 4) + 16] = len
xlength = 取数组成员数 (x)
a = 1732584193
b = -271733879
c = -1732584194
d = 271733878
e = -1009589776
变量循环首 (0, xlength, 16, i)
如果真 (i ≥ xlength)
跳出循环 ()
olda = a
oldb = b
oldc = c
oldd = d
olde = e
变量循环首 (0, 80, 1, j)
如果真 (j ≥ 80)
跳出循环 ()
如果 (j < 16)
w [j + 1] = x [i + j + 1]
' 调试输出 (w [j + 1], j + 1)
w [j + 1]bit_rol (位异或 (w [j - 3 + 1], w [j - 8 + 1], w [j - 14 + 1], w [j - 16 + 1]), 1)
' 调试输出 (w [j + 1], j + 1)
' w [j + 1] = 0
t = safe_add (safe_add (bit_rol (a, 5), sha1_ft (j, b, c, d)), safe_add (safe_add (e, w [j + 1]), sha1_kt (j)))
e = d
d = c
c = bit_rol (b, 30)
b = a
a = t
变量循环尾 ()
a = safe_add (a, olda)
b = safe_add (b, oldb)
c = safe_add (c, oldc)
d = safe_add (d, oldd)
e = safe_add (e, olde)
变量循环尾 ()
重定义数组 (return, 假, 5)
return [1] = a
return [2] = b
return [3] = c
return [4] = d
return [5] = e








这些代码翻译自js和php的源码,部分js源码在常量内
经测试,取MD5和sha1的速度是调用advapi32.dll  API的4倍
b64_hmac_sha1 和 b64_hmac_sha256 是很多开发者平台API的签名算法,以前基本上都是靠js对象方法来实现,效率极低,现在直接用数学方法计算后,效率和兼容性方面都有大大的提高


数据计算.zip

28.22 KB, 下载次数: 1746, 下载积分: 精币 -2 枚

点评

前排提示这里面的hex_hmac_sha256当明文有换行符和/:等符号时,算的不准!还是感谢楼主分享   山东省潍坊市  发表于 2023-3-7 14:24

评分

参与人数 3好评 +3 精币 +9 收起 理由
0010101 + 1 + 3 支持开源~!感谢分享
birdmanxp + 1 + 5 感谢分享,很给力!~
wxinlin + 1 + 1 支持开源~!感谢分享

查看全部评分


结帖率:100% (33/33)

签到天数: 18 天

发表于 2024-10-14 21:38:45 | 显示全部楼层   广东省揭阳市
前人栽树,后人乘凉
回复 支持 反对

使用道具 举报

发表于 2024-7-30 13:07:08 | 显示全部楼层   广东省珠海市
前人栽树,后人乘凉
回复 支持 反对

使用道具 举报

结帖率:91% (10/11)

签到天数: 4 天

发表于 2024-7-29 06:26:23 | 显示全部楼层   湖南省怀化市
表示算的 并不准确
回复 支持 反对

使用道具 举报

结帖率:92% (207/225)

签到天数: 15 天

发表于 2024-5-12 09:13:04 | 显示全部楼层   广西壮族自治区崇左市
速度怎么样啊
回复 支持 反对

使用道具 举报

结帖率:92% (207/225)

签到天数: 15 天

发表于 2024-5-12 09:12:50 | 显示全部楼层   广西壮族自治区崇左市
速度怎么样啊
回复 支持 反对

使用道具 举报

发表于 2024-5-12 09:09:14 | 显示全部楼层   贵州省遵义市
支持,膜拜了~
回复 支持 反对

使用道具 举报

发表于 2024-2-24 14:33:52 | 显示全部楼层   湖北省武汉市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:87% (13/15)

签到天数: 12 天

发表于 2024-2-5 18:06:13 | 显示全部楼层   山东省青岛市
#在这里快速回复##在这里快速回复##在这里快速回复#
回复 支持 反对

使用道具 举报

结帖率:90% (9/10)
发表于 2023-3-9 10:49:35 | 显示全部楼层   江苏省苏州市
前人栽树,后人乘凉
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 2 天

发表于 2023-3-7 11:59:52 | 显示全部楼层   山东省潍坊市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表