最近,我一直在尝试找出如何将用C#编写的此函数转换为node.js,我已经尝试了很长时间,并查看了很多问题来找出如何解决该问题的方法。 6或7个小时,没有运气,我尝试转换为节点的代码是一个加密函数,该函数使用具有uint和ulong位的方法来加密int,我现在来到stackoverflow寻求帮助,因为已经尝试了很长时间,还没有找到任何答案或解决方案。我尽力解释了该功能的作用,如果很难理解,我感到抱歉。这是我一直尝试转换的代码。 如果您确实要进行转换,那么如果您能向我解释您是如何做到的,以及将来自己如何实现,我将不胜感激。谢谢
private static ulong teaEncrypt(ulong EncryptNum)
{
uint[] numArray = new uint[4]
{
1519839710U,
2072041700U,
3432422232U,
731448588U
};
uint num1 = (uint) (EncryptNum & (ulong) uint.MaxValue);
uint num2 = (uint) (EncryptNum >> 32);
uint num3 = 0;
for (int index = 0; index < 32; ++index)
{
num3 += 3523417902U;
num1 += (uint) (((int) num2 << 9) + (int) numArray[0] ^ (int) num2 + (int) num3 ^ (int) (num2 >> 5) + (int) numArray[1]);
num2 += (uint) (((int) num1 << 9) + (int) numArray[2] ^ (int) num1 + (int) num3 ^ (int) (num1 >> 5) + (int) numArray[3]);
}
return (ulong) num2 << 32 | (ulong) num1;
}
这是我尝试将代码转换为node.js
var uint32 = require('uint32')
var numArray =
[
1519839710,
2072041700,
3432422232,
731448588
]
function encrypt(EncryptNum)
{
//const buf = Buffer.allocUnsafe(8);
var encnum32 = uint32.toUint32(EncryptNum)
var num1 = uint32.toUint32((encnum32 & 4294967295))
//console.log(num1)
var num2 = uint32.toUint32((encnum32 >> 32))
//console.log(num2)
var num3 = 0
for (i = 0; i < 32; i++) {
//console.log("1 " + uint32.toUint32(num2 << 9))
//console.log("2 " + buf.writeInt32BE(num2, 0))
num3 += 3523417902;
num1 += uint32.toUint32(((num2 << 9) + numArray[0] ^ num2 + num3 ^ (num2 >> 5) + numArray[1]))
num2 += uint32.toUint32(((num1 << 9) + numArray[2] ^ num1 + num3 ^ (num1 >> 5) + numArray[3]))
}
return num2 << 32 | num1
}