为编程爱好者分享易语言教程源码的资源网

网站首页 > 易语言相关 > 易语言例程 正文

易语言Base64_hmac_sha1加密算法源码

三叶资源网 2016-02-16 17:01:18 易语言例程 4852 ℃ 8 评论

易语言Base64_hmac_sha1加密算法源码

.版本 2

.程序集 程序集1

.子程序 _启动子程序, 整数型
.局部变量 str, 文本型
.局部变量 key, 文本型

str = “ddddfw456gfh32fg32 fg3df32gd fd”
key = “73wW2Dc6ffr0.fdgd32gdf4gs/”
输出调试文本 (Base64_hmac_sha1 (str, key))
返回 (0)

.子程序 Base64_hmac_sha1, 文本型, , 如果参数有汉字,请注意编码
.参数 data, 文本型
.参数 key, 文本型

返回 (rstr2b64 (rstr_hmac_sha1 (到字节集 (data), 到字节集 (key))))

.子程序 safe_add, 整数型
.参数 x, 整数型
.参数 y, 整数型
.局部变量 lsw, 整数型
.局部变量 msw, 整数型
.局部变量 return, 整数型

lsw = 位与 (x, 65535) + 位与 (y, 65535)
msw = 右移 (x, 16) + 右移 (y, 16) + 右移 (lsw, 16)
return = 位或 (左移 (msw, 16), 位与 (lsw, 65535))
返回 (return)

.子程序 bit_rol, 整数型
.参数 num, 整数型
.参数 cnt, 整数型
.局部变量 return, 整数型

return = 位或 (左移 (num, cnt), 逻辑右移 (num, 32 - cnt))
返回 (return)

.子程序 sha1_kt, 整数型
.参数 t, 整数型

.判断开始 (t < 20)
    返回 (1518500249)
.判断 (t < 40)
    返回 (1859775393)
.判断 (t < 60)
    返回 (-1894007588)
.默认
    返回 (-899497514)
.判断结束


.子程序 sha1_ft, 整数型
.参数 t, 整数型
.参数 b, 整数型
.参数 c, 整数型
.参数 d, 整数型

.如果真 (t < 20)
    返回 (位或 (位与 (b, c), 位与 (位取反 (b), d)))
.如果真结束
' 本源码来自三叶资源网(www.sanye.cx)
.如果真 (t < 40)
    返回 (位异或 (b, c, d))
.如果真结束

.如果真 (t < 60)
    返回 (位或 (位与 (b, c), 位与 (b, d), 位与 (c, d)))
.如果真结束

返回 (位异或 (b, c, d))

.子程序 rstr2b64, 文本型
.参数 input, 字节集
.局部变量 tab, 文本型, , "0"
.局部变量 output, 文本型
.局部变量 len, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 triplet, 整数型
.局部变量 input2, 字节集

tab = { “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”, “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”, “m”, “n”, “o”, “p”, “q”, “r”, “s”, “t”, “u”, “v”, “w”, “x”, “y”, “z”, “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “+”, “/” }
len = 取字节集长度 (input)
input2 = input + { 0, 0 }
.变量循环首 (0, len, 3, i)
    .如果真 (i ≥ len)
        跳出循环 ()
    .如果真结束

    triplet = 位或 (左移 (input2 [i + 1], 16), 选择 (i + 1 < len, 左移 (input2 [i + 2], 8), 0), 选择 (i + 2 < len, input2 [i + 3], 0))
    .变量循环首 (0, 4, 1, j)
        .如果真 (j ≥ 4)
            跳出循环 ()
        .如果真结束

        .如果 (i × 8 + j × 6 > len × 8)
            output = output + “=”
        .否则
            output = output + tab [位与 (逻辑右移 (triplet, 6 × (3 - j)), 63) + 1]
        .如果结束

    .变量循环尾 ()

.变量循环尾 ()
返回 (output)

.子程序 rstr2binb
.参数 input, 字节集
.参数 output, 整数型, 数组
.局部变量 inputlength, 整数型
.局部变量 outputlength, 整数型
.局部变量 i, 整数型
.局部变量 jp, 整数型

inputlength = 取字节集长度 (input)
重定义数组 (output, 假, 右移 (inputlength, 2))
outputlength = 取数组成员数 (output)
.如果真 (outputlength < 右移 (inputlength × 8, 5) + 1)
    重定义数组 (output, 真, 右移 (inputlength × 8, 5) + 1)
.如果真结束

.变量循环首 (0, outputlength, 1, i)
    .如果真 (i ≥ outputlength)
        跳出循环 ()
    .如果真结束
    output [i + 1] = 0
.变量循环尾 ()
i = 0
.变量循环首 (0, inputlength × 8, 8, i)
    .如果真 (i ≥ inputlength × 8)
        跳出循环 ()
    .如果真结束

    output [右移 (i, 5) + 1] = 位或 (output [右移 (i, 5) + 1], 左移 (位与 (input [i ÷ 8 + 1], 255), 24 - i % 32))
.变量循环尾 ()

.子程序 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] = bit_rol (位异或 (w [j - 3 + 1], w [j - 8 + 1], w [j - 14 + 1], w [j - 16 + 1]), 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

.子程序 binb2rstr, 字节集
.参数 input, 整数型, 数组
.局部变量 output, 字节集
.局部变量 length, 整数型
.局部变量 i, 整数型

length = 取数组成员数 (input) × 32
.变量循环首 (0, length, 8, i)
    .如果真 (i ≥ length)
        跳出循环 ()
    .如果真结束

    output = output + 到字节集 (到字节 (位与 (逻辑右移 (input [右移 (i, 5) + 1], 24 - i % 32), 255)))
.变量循环尾 ()
返回 (output)

.子程序 rstr_hmac_sha1, 字节集
.参数 data, 字节集
.参数 key, 字节集
.局部变量 bkey, 整数型, , "0"
.局部变量 length, 整数型
.局部变量 ipad, 整数型, , "16"
.局部变量 opad, 整数型, , "16"
.局部变量 i, 整数型
.局部变量 数组容器, 整数型, , "0"
.局部变量 hash, 整数型, , "0"

rstr2binb (key, bkey)

length = 取数组成员数 (bkey)
.如果真 (length > 16)
    binb_sha1 (bkey, 取字节集长度 (key) × 8, bkey)
.如果真结束

.如果真 (取数组成员数 (bkey) < 16)
    重定义数组 (bkey, 真, 16)
.如果真结束
' 本源码来自三叶资源网(www.sanye.cx)
.变量循环首 (1, 16, 1, i)
    ipad [i] = 位异或 (bkey [i], 909522486)
    opad [i] = 位异或 (bkey [i], 1549556828)

.变量循环尾 ()
rstr2binb (data, 数组容器)
加入成员 (ipad, 数组容器)

binb_sha1 (ipad, 512 + 取字节集长度 (data) × 8, hash)
清除数组 (数组容器)
加入成员 (opad, hash)

binb_sha1 (opad, 512 + 160, 数组容器)
返回 (binb2rstr (数组容器))

.子程序 逻辑右移, 整数型, , (逻辑右移) (算术右移) 寄存器,1
.参数 欲移动的整数, 整数型
.参数 欲被移动的位数, 字节型

置入代码 ({ 81, 139, 69, 8, 138, 77, 12, 211, 232, 89, 139, 229, 93, 194, 8, 0 })
返回 (-1)

@资源源码站

文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

已有8位网友发表了看法:

  • 易语言

    易语言  评论于 [2020-05-09 14:12:16]  回复

    易语言hash_hmac

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
手动记牌登陆QQ群发辅助教程粒子发射器Edge浏览器phpotoshop找图快递查询sqlite图片转PDF助手QQ消息后台发送奇易模块斗图神器内存操作模块源码易语言模块源码58t同城sqllite查大鱼号昵称百度POST登录协议
最新评论