Как правильно конвертировать Base64 из BigInt.js в Ruby

Я использую BigInt.js Лимона Бэрда (документация) для обработки больших целых чисел. Мне нужно иметь возможность получить одно и то же целое число из BigInt в Ruby.

Пример JS-файла:

var number = "1234567890987654321";
var bigNumber = str2bigInt(number, 10, 80); //10: input = Decimal
var bigNumber64 = bigInt2str(bigNumber, 64); //64: ouput = Base64
console.log(bigNumber64);
//--> 14Y4FInR1on

Пример рубинового файла:

big_number_64 = '14Y4FInR1on'
big_number = Base64.decode64(big_number_64) #input: Base64: output: decoded string
big_number = big_number.unpack('B*').first #B*: output = Binary
big_number = big_number.to_i(2) #read big_number as binary, output = integer
puts big_number
#--> 26313825004518719100904402231695296969994

Моя проблема в том, что мне нужно, чтобы это было равно

1234567890987654321 != 26313825004518719100904402231695296969994

я пробовал

big_number = big_number_64.unpack('m*').first.unpack('B*').first

И попытался обратить процесс вспять и проверить Base64 == Base64 вместо Decimal == Decimal, и я не могу сделать их равными.

Пожалуйста помоги.


person Jay-Ar Polidario    schedule 08.03.2014    source источник
comment
Очень важно сначала преобразовать «большое число» в Base64, поскольку я передаю его в качестве параметра через AJAX для отправки на сервер Ruby. Я думаю, мне нужно сначала преобразовать его в двоичный код в этой строке big_number = big_number.unpack('B*').first, так как перед ним все еще находится двоичная строка. Посоветуйте, если я ошибаюсь :)   -  person Jay-Ar Polidario    schedule 08.03.2014
comment
На стороне клиента это просто строка. Вам абсолютно не нужен BigInt.js. Просто отправьте строку на сервер и позвольте Ruby преобразовать ее в целое число. Если только ваш вопрос на самом деле не отражает вашу потребность, и вам нужно нужна целочисленная арифметика или что-то подобное на клиенте.   -  person meagar    schedule 08.03.2014
comment
Да, реальный код намного сложнее этого. Я использую BigInt.js для вычисления открытого ключа Диффи-Хеллмана, который имеет тип объекта bigint. И я не могу передать сам объект на сервер. Я попытался отправить его как целое число, но у меня возникла проблема (я думаю, это связано с тем, что открытый ключ с десятичной базой очень и очень длинный, чтобы его можно было передать в качестве параметра GET). Вот почему я подумал сначала преобразовать его в Base64. .   -  person Jay-Ar Polidario    schedule 08.03.2014
comment
Да, я тоже так думал :) может быть, я просто буду придерживаться базы (36), которую вы мне показали. Очень признателен! :)   -  person Jay-Ar Polidario    schedule 08.03.2014


Ответы (1)