《JS、PY、E》2篇小算法,位运算符

博客展示了如何使用Python和易语言实现简单的异或加密解密算法,并提供了JavaScript的GTK哈希计算示例。加密解密算法通过异或操作实现,GTK哈希函数则基于特定的位运算进行字符串的哈希值计算。这些基础算法在信息安全和数据处理中有着广泛的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 大恩算法

python

def encode(data):
    length = len(data)
    key = length % 254 + 1
    ret = []
    for i in range(length):
        ret.append(chr(ord(data[i]) ^ key))
    return ''.join(ret)

text = "adsad"
a = encode(text)
b = encode(a)

print("明文",text)
print("加密值",a)
print("解密值",b)

# 明文 adsad
# 加密值 gbugb
# 解密值 adsad

易语言

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口

.子程序 __启动窗口_创建完毕
.局部变量 text, 文本型
.局部变量 a, 字节集
.局部变量 b, 字节集

text = “adsad”

a = 大恩_加密 (到字节集 (text))
b = 大恩_解密 (a)

调试输出 (“明文”, text)
调试输出 (“加密值”, 到文本 (a))
调试输出 (“解密值”, 到文本 (b))
' [14:54:38] * “明文” | “adsad”
' [14:54:38] * “加密值” | “gbugb”
' [14:54:38] * “解密值” | “adsad”

' 解密算法 也一样


.子程序 大恩_加密, 字节集, , 这是演示用的简单异或算法,你可以修改成复杂算法,防止被轻易破解
.参数 数据, 字节集
.局部变量 密匙, 整数型
.局部变量 计次, 整数型
.局部变量 结果, 字节集
.局部变量 长度, 整数型

长度 = 取字节集长度 (数据)
密匙 = 长度 % 254 + 1
结果 = 取空白字节集 (长度)
.计次循环首 (长度, 计次)
    结果 [计次] = 位异或 (数据 [计次], 密匙)
.计次循环尾 ()
返回 (结果)

.子程序 大恩_解密, 字节集, , 这是演示用的简单异或算法,你可以修改成复杂算法,防止被轻易破解
.参数 数据, 字节集
.局部变量 长度, 整数型
.局部变量 密匙, 整数型
.局部变量 计次, 整数型
.局部变量 结果, 字节集

长度 = 取字节集长度 (数据)
密匙 = 长度 % 254 + 1
结果 = 取空白字节集 (长度)
.计次循环首 (长度, 计次)
    结果 [计次] = 位异或 (数据 [计次], 密匙)
.计次循环尾 ()
返回 (结果)

2.getGTK

javascript

function getGTK(str) {
    var hash = 5381;
    for (var i = 0, len = str.length; i < len; ++i) {
        hash += (hash << 5) + str.charAt(i).charCodeAt();
    }
    return hash & 0x7fffffff;
}


a = getGTK('@LZyBNccVa');
console.log(a=="1583295761");

python

def getGTK(str):
    hash = 5381
    for i in range(len(str)):
        hash += (hash << 5) + ord(str[i])
    return hash & 0x7fffffff

a = getGTK("@LZyBNccVa")
print(str(a)=="1583295761")

易语言

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口

.子程序 __启动窗口_创建完毕

调试输出 (getGTK (“@LZyBNccVa”) = “1583295761”)

.子程序 getGTK, 文本型
.参数 str, 文本型
.局部变量 hash, 整数型
.局部变量 i, 整数型

hash = 5381
.计次循环首 (取文本长度 (str), i)
    hash = hash + 左移 (hash, 5) + 取代码 (取文本中间 (str, i, 1), )
.计次循环尾 ()
返回 (到文本 (位与 (hash, 2147483647)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值