将高级C#函数转换为javascript

时间:2018-11-25 19:48:51

标签: javascript c# node.js encryption

最近,我一直在尝试找出如何将用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
}

0 个答案:

没有答案