开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 2062|回复: 8
收起左侧

[易源码分享] 分享一个少见算法 Salsa20以前都没听说过这个算法,翻译py的

[复制链接]
结帖率:100% (30/30)
发表于 2022-8-21 23:52:13 | 显示全部楼层 |阅读模式   辽宁省大连市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 0010101 于 2022-8-21 23:57 编辑
  
窗口程序集名保 留  保 留备 注
类_Salsa   
变量名类 型数组备 注
selfthis_Salsa  

子程序名返回值类型公开备 注
_初始化 当基于本类的对象被创建后,此方法会被自动调用

子程序名返回值类型公开备 注
_销毁 当基于本类的对象被销毁前,此方法会被自动调用

子程序名返回值类型公开备 注
__init__ 
参数名类 型参考可空数组备 注
r整数型
self._r = r
判断 (是否为空 (r))
self._r = 20
self._r = r

self._mask = 4294967295  ' # 32-bit mask
子程序名返回值类型公开备 注
__call__整数型 
参数名类 型参考可空数组备 注
key字节集
nonce字节集
block_counter字节集
结果数组长整数型
变量名类 型静态数组备 注
k整数型0
i整数型 
n整数型0
b整数型0
c整数型0
s长整数型0
局_结果文本型 
局_临时文本型 
' def __call__(self,key=[0]*32,nonce=[0]*8,block_counter=[0]*8):
' assert len(key) == 32
' assert len(nonce) == 8
' assert len(block_counter) == 8
' # init state
计次循环首 (8, i)
加入成员 (k, _littleendian (取字节集中间 (key, (i - 1) × 4 + 1, 4)))
计次循环尾 ()
' k = [self._littleendian(key[4*i:4*i+4]) for i in xrange(8)]
计次循环首 (2, i)
加入成员 (n, _littleendian (取字节集中间 (nonce, (i - 1) × 4 + 1, 4)))
计次循环尾 ()
' 调试输出 (“n”, n)
' n = [self._littleendian(nonce[4*i:4*i+4]) for i in xrange(2)]
计次循环首 (2, i)
加入成员 (b, _littleendian (取字节集中间 (block_counter, (i - 1) × 4 + 1, 4)))
计次循环尾 ()
' 调试输出 (“b”, b)
' b = [self._littleendian(block_counter[4*i:4*i+4]) for i in xrange(2)]
c = { 1634760805, 857760878, 2036477234, 1797285236 }
' c = [0x61707865, 0x3320646e, 0x79622d32, 0x6b206574]
重定义数组 (s, 假, 16)
s [1] = c [0 + 1]
s [2] = k [0 + 1]
s [3] = k [1 + 1]
s [4] = k [2 + 1]
s [5] = k [3 + 1]
s [6] = c [1 + 1]
s [7] = n [0 + 1]
s [8] = n [1 + 1]
s [9] = b [0 + 1]
s [10] = b [1 + 1]
s [11] = c [2 + 1]
s [12] = k [4 + 1]
s [13] = k [5 + 1]
s [14] = k [6 + 1]
s [15] = k [7 + 1]
s [16] = c [3 + 1]
' s = [c[0], k[0], k[1], k[2],
' k[3], c[1], n[0], n[1],
' b[0], b[1], c[2], k[4],
' k[5], k[6], k[7], c[3]]
' # the state
' 调试输出 (s)
self._s = s
' self._s = s[:]
计次循环首 (self._r, )
_round ()
计次循环尾 ()
' for i in xrange(self._r):
' self._round()
' # add initial state to the final one
计次循环首 (16, i)
self._s [i]位与_ (self._s [i] + s [i], self._mask)
计次循环尾 ()
' self._s = [(self._s[i] + s[i]) & self._mask for i in xrange(16)]
结果数组 = self._s
返回 (取数组成员数 (结果数组))
' 返回 (self._s)
' return self._s
子程序名返回值类型公开备 注
_littleendian整数型 
参数名类 型参考可空数组备 注
b字节集4个字节
变量名类 型静态数组备 注
临时证书整数型 
' def _littleendian(self,b):
' assert len(b) == 4
' return b[0] ^ (b[1] << 8) ^ (b[2] << 16) ^ (b[3] << 24)
' b[0+1] ^ 左移(b[1+1], 8) ^ 左移(b[2+1] , 16) ^ 左移(b[3+1] , 24)
临时证书 = 位异或 (b [0 + 1], 左移 (b [1 + 1], 8))
临时证书 = 位异或 (临时证书, 左移 (b [2 + 1], 16))
临时证书 = 位异或 (临时证书, 左移 (b [3 + 1], 24))
返回 (临时证书)
子程序名返回值类型公开备 注
_round  
变量名类 型静态数组备 注
局_临时_s长整数型0
' def _round(self):
' # quarterround 1
' self._s[ 4] ^= self._rotl32((self._s[ 0] + self._s[12]) & self._mask, 7)
' self._s[ 8] ^= self._rotl32((self._s[ 0] + self._s[ 4]) & self._mask, 9)
' self._s[12] ^= self._rotl32((self._s[ 4] + self._s[ 8]) & self._mask,13)
' self._s[ 0] ^= self._rotl32((self._s[ 8] + self._s[12]) & self._mask,18)
' 调试输出 (self._s [4 + 1], _rotl32 (位与_ (self._s [0 + 1] + self._s [12 + 1], self._mask), 7))
' 调试输出 (位异或_ (269422093, 3284614460))
self._s [4 + 1]位异或_中转 (self._s [4 + 1], _rotl32 (位与_ (self._s [0 + 1] + self._s [12 + 1], self._mask), 7))
self._s [8 + 1]位异或_中转 (self._s [8 + 1], _rotl32 (位与_ (self._s [0 + 1] + self._s [4 + 1], self._mask), 9))
self._s [12 + 1]位异或_中转 (self._s [12 + 1], _rotl32 (位与_ (self._s [4 + 1] + self._s [8 + 1], self._mask), 13))
self._s [0 + 1]位异或_中转 (self._s [0 + 1], _rotl32 (位与_ (self._s [8 + 1] + self._s [12 + 1], self._mask), 18))
' # quarterround 2
' self._s[ 9] ^= self._rotl32((self._s[ 1] + self._s[ 5]) & self._mask, 7)
' self._s[13] ^= self._rotl32((self._s[ 5] + self._s[ 9]) & self._mask, 9)
' self._s[ 1] ^= self._rotl32((self._s[ 9] + self._s[13]) & self._mask,13)
' self._s[ 5] ^= self._rotl32((self._s[ 1] + self._s[13]) & self._mask,18)
self._s [9 + 1]位异或_中转 (self._s [9 + 1], _rotl32 (位与_ (self._s [1 + 1] + self._s [5 + 1], self._mask), 7))
self._s [13 + 1]位异或_中转 (self._s [13 + 1], _rotl32 (位与_ (self._s [5 + 1] + self._s [9 + 1], self._mask), 9))
self._s [1 + 1]位异或_中转 (self._s [1 + 1], _rotl32 (位与_ (self._s [9 + 1] + self._s [13 + 1], self._mask), 13))
self._s [5 + 1]位异或_中转 (self._s [5 + 1], _rotl32 (位与_ (self._s [1 + 1] + self._s [13 + 1], self._mask), 18))
' # quarterround 3
' self._s[14] ^= self._rotl32((self._s[ 6] + self._s[10]) & self._mask, 7)
' self._s[ 2] ^= self._rotl32((self._s[10] + self._s[14]) & self._mask, 9)
' self._s[ 6] ^= self._rotl32((self._s[ 2] + self._s[14]) & self._mask,13)
' self._s[10] ^= self._rotl32((self._s[ 2] + self._s[ 6]) & self._mask,18)
self._s [14 + 1]位异或_中转 (self._s [14 + 1], _rotl32 (位与_ (self._s [6 + 1] + self._s [10 + 1], self._mask), 7))
self._s [2 + 1]位异或_中转 (self._s [2 + 1], _rotl32 (位与_ (self._s [10 + 1] + self._s [14 + 1], self._mask), 9))
self._s [6 + 1]位异或_中转 (self._s [6 + 1], _rotl32 (位与_ (self._s [2 + 1] + self._s [14 + 1], self._mask), 13))
self._s [10 + 1]位异或_中转 (self._s [10 + 1], _rotl32 (位与_ (self._s [2 + 1] + self._s [6 + 1], self._mask), 18))
' # quarterround 4
' self._s[ 3] ^= self._rotl32((self._s[11] + self._s[15]) & self._mask, 7)
' self._s[ 7] ^= self._rotl32((self._s[ 3] + self._s[15]) & self._mask, 9)
' self._s[11] ^= self._rotl32((self._s[ 3] + self._s[ 7]) & self._mask,13)
' self._s[15] ^= self._rotl32((self._s[ 7] + self._s[11]) & self._mask,18)
self._s [3 + 1]位异或_中转 (self._s [3 + 1], _rotl32 (位与_ (self._s [11 + 1] + self._s [15 + 1], self._mask), 7))
self._s [7 + 1]位异或_中转 (self._s [7 + 1], _rotl32 (位与_ (self._s [3 + 1] + self._s [15 + 1], self._mask), 9))
self._s [11 + 1]位异或_中转 (self._s [11 + 1], _rotl32 (位与_ (self._s [3 + 1] + self._s [7 + 1], self._mask), 13))
self._s [15 + 1]位异或_中转 (self._s [15 + 1], _rotl32 (位与_ (self._s [7 + 1] + self._s [11 + 1], self._mask), 18))
' # transpose
' self._s = [self._s[ 0], self._s[ 4], self._s[ 8], self._s[12],
' self._s[ 1], self._s[ 5], self._s[ 9], self._s[13],
' self._s[ 2], self._s[ 6], self._s[10], self._s[14],
' self._s[ 3], self._s[ 7], self._s[11], self._s[15]]
局_临时_s = self._s
self._s [1] = 局_临时_s [0 + 1]
self._s [2] = 局_临时_s [4 + 1]
self._s [3] = 局_临时_s [8 + 1]
self._s [4] = 局_临时_s [12 + 1]
self._s [5] = 局_临时_s [1 + 1]
self._s [6] = 局_临时_s [5 + 1]
self._s [7] = 局_临时_s [9 + 1]
self._s [8] = 局_临时_s [13 + 1]
self._s [9] = 局_临时_s [2 + 1]
self._s [10] = 局_临时_s [6 + 1]
self._s [11] = 局_临时_s [10 + 1]
self._s [12] = 局_临时_s [14 + 1]
self._s [13] = 局_临时_s [3 + 1]
self._s [14] = 局_临时_s [7 + 1]
self._s [15] = 局_临时_s [11 + 1]
self._s [16] = 局_临时_s [15 + 1]
' 调试输出 (self._s)
子程序名返回值类型公开备 注
_rotl32长整数型 
参数名类 型参考可空数组备 注
w长整数型
r长整数型
变量名类 型静态数组备 注
局_临时长整数长整数型 
局_临时长整数2长整数型 
' def _rotl32(self,w,r):
' # rotate left for 32-bits
局_临时长整数 = 左移_ (w, r)
局_临时长整数 = 位与_ (局_临时长整数, self._mask)
局_临时长整数2 = 右移_ (w, 32 - r)
局_临时长整数 = 位或_ (局_临时长整数, 局_临时长整数2)
' return ( ( ( w << r ) & self._mask) | ( w >> ( 32 - r ) ) )
返回 (局_临时长整数)
子程序名返回值类型公开备 注
位异或_中转长整数型 
参数名类 型参考可空数组备 注
参数1长整数型
参数2长整数型
变量名类 型静态数组备 注
a长整数型 
b长整数型 
c长整数型 
c = 位异或_ (参数1, 参数2)
返回 (c)

调用方式
  
子程序名返回值类型公开备 注
_临时子程序  
变量名类 型静态数组备 注
salsa类_Salsa 
局_结果数组长整数型0
i整数型 
局_结果文本型 
局_临时文本型 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
salsa.__init__ ()
salsa.__call__ ({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 }, { 3, 1, 4, 1, 5, 9, 2, 6 }, { 7, 0, 0, 0, 0, 0, 0, 0 }, 局_结果数组)
计次循环首 (取数组成员数 (局_结果数组), i)
局_临时 = 取十六进制文本 (到整数 (局_结果数组 [i]))
如果真 (取文本长度 (局_临时) % 2 = 1)
局_临时 = “0” + 局_临时

局_结果 = 局_结果 + “,0x” + 局_临时
如果真 (i % 4 = 0)
调试输出 (局_结果)
局_结果 = “”

计次循环尾 ()
' [ 0xb9a205a3,0x0695e150,0xaa94881a,0xadb7b12c,
' 0x798942d4,0x26107016,0x64edb1a4,0x2d27173f,
' 0xb1c7f1fa,0x62066edc,0xe035fa23,0xc4496f04,
' 0x2131e6b3,0x810bde28,0xf62cb407,0x6bdede3d ]



i支持库列表   支持库注释   
spec特殊功能支持库

参考翻译原地址https://github.com/Daeinar/salsa20
Salsa20算法.zip (271.75 KB, 下载次数: 24)

评分

参与人数 1好评 +1 精币 +3 收起 理由
易语言资源网 + 1 + 3 开源精神必须支持~

查看全部评分


发表于 2023-5-30 15:18:41 | 显示全部楼层   黑龙江省牡丹江市
开源精神必须支持~
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
发表于 2022-8-22 20:54:03 | 显示全部楼层   广东省深圳市
谢谢分享!
回复 支持 反对

使用道具 举报

签到天数: 20 天

发表于 2022-8-22 11:11:43 | 显示全部楼层   保留地址
以前看chacha20的时候看到过 还没有应用到~


回复 支持 反对

使用道具 举报

签到天数: 20 天

发表于 2022-8-22 10:46:03 | 显示全部楼层   广东省广州市
开源精神必须支持~
回复 支持 反对

使用道具 举报

结帖率:93% (14/15)

签到天数: 2 天

发表于 2022-8-22 10:11:47 | 显示全部楼层   广东省深圳市
这个干嘛用的
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 14 天

发表于 2022-8-22 10:02:17 | 显示全部楼层   湖南省邵阳市
第一次听说
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2022-8-22 09:48:49 | 显示全部楼层   辽宁省大连市
谢谢分享!
回复 支持 反对

使用道具 举报

签到天数: 13 天

发表于 2022-8-22 09:43:27 高大上手机用户 | 显示全部楼层   重庆市重庆市
感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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