将XOR函数添加到bigint库

时间:2010-06-09 16:30:33

标签: javascript

我正在将这个Big Integer库用于Javascript:http://www.leemon.com/crypto/BigInt.js,我需要能够将两个bigInt放在一起,遗憾的是库不包含这样的功能。图书馆相对简单,所以我认为这不是一项艰巨的任务,只是令人困惑。

我一直试图一起破解,但没有太多运气,如果有人可以伸出援助之手,我将非常感激。这是我尝试过的(可能是错的)。但我猜测结构将与其中的一些其他功能非常相似。

function xor(x, y)
{
    var c, k, i;
    var result = new Array(0); // big int for result

    k=x.length>y.length ? x.length : y.length; // array length of the larger num

    // Make sure result is the correct array size? maybe:
    result = expand(result, k); // ?

    for (c=0, i=0; i < k; i++)
    {
        // Do some xor here
    }

    // return the bigint xor result
    return result;
}

令我困惑的是我真的不明白它如何在bigInt的数组块中存储数字。我认为这不是简单的bigintC [i] = bigintA [i] ^ bigintB [i]的情况,那么大多数其他函数在最后都有一些我不理解的屏蔽操作。我真的很感激任何帮助这项工作。

由于

2 个答案:

答案 0 :(得分:0)

看起来js正在将int存储到每个数组元素的bpe位中。

看看这个:

//convert the integer t into a bigInt with at least the given number of bits.
//the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)
//Pad the array with leading zeros so that it has at least minSize elements.
//There will always be at least one leading 0 element.
function int2bigInt(t,bits,minSize) {   
  var i,k;
  k=Math.ceil(bits/bpe)+1;
  k=minSize>k ? minSize : k;
  buff=new Array(k);
  copyInt_(buff,t);
  return buff;
}

以及文件顶部的注释:

// This code defines a bigInt library for arbitrary-precision integers.
// A bigInt is an array of integers storing the value in chunks of bpe bits, 
// little endian (buff[0] is the least significant word).

所以走数组,每个数组元素的bpe位按位XOR应该有效。

如果bigints是负数,你可能需要注意,因为代表有2s补码。

答案 1 :(得分:-1)

Javascript内置了对按位运算符的支持 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Bitwise_Operators

alert(14 ^ 9) // 7

<强>更新
应该更好地阅读问题,OP显然已经意识到了运营商