// 加密
export function btea(source: Uint8Array, key: Uint8Array) {
const n = source.length
enum KEY { z, y, sum, q, p, e, DELTA }
const uint32_t = new Uint32Array(7)
uint32_t[KEY.z] = source[n - 1]
uint32_t[KEY.y] = source[0]
uint32_t[KEY.sum] = 0
uint32_t[KEY.q] = 0
uint32_t[KEY.p] = 0
uint32_t[KEY.e] = 0
uint32_t[KEY.DELTA] = 0x9e3779b9
uint32_t[KEY.q] = 6 + 52 / n
function MX(
z: number,
y: number,
sum: number,
key: Uint8Array,
p: number,
e: number
) {
const MX_Temp = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (key[p & 3 ^ e] ^ z)
return MX_Temp
}
while (uint32_t[KEY.q]-- > 0) {
uint32_t[KEY.sum] += uint32_t[KEY.DELTA]
uint32_t[KEY.e] = (uint32_t[KEY.sum] >> 2) & 3
for (uint32_t[KEY.p] = 0; uint32_t[KEY.p] < n - 1; uint32_t[KEY.p]++) {
uint32_t[KEY.y] = source[uint32_t[KEY.p] + 1]
source[uint32_t[KEY.p]] += MX(
uint32_t[KEY.z],
uint32_t[KEY.y],
uint32_t[KEY.sum],
key,
uint32_t[KEY.p],
uint32_t[KEY.e],
)
uint32_t[KEY.z] = source[uint32_t[KEY.p]]
}
uint32_t[KEY.y] = source[0]
source[n - 1] += MX(
uint32_t[KEY.z],
uint32_t[KEY.y],
uint32_t[KEY.sum],
key,
uint32_t[KEY.p],
uint32_t[KEY.e],
)
uint32_t[KEY.z] = source[n - 1]
}
return source
}
BTEA算法加密 TypeScript 实现
猜你喜欢
转载自blog.csdn.net/weixin_40862891/article/details/104753822
今日推荐
周排行