Шифрование RSA в JavaScript
При шифровании RSA приходится выполнять такую операцию (x^e) mod N. Числа x,e,N могут быть 300 - значными и даже больше. Внимание вопрос. Как в JS реализовать вот это самое (x^e) mod N ? Желательно готовый пример кода, а не ссылка :-)
Ответы (2 шт):
Автор решения: Павел Ериков
→ Ссылка
Через онлайн редактор код ниже у меня работает за считанные секунды: Используется библиотека длинных чисел
let x = bigInt("136546546465465465465465449849846546516557498794654654798449464165749864");
let N = bigInt("14645654654654654654654654165465765461697941657496641");
let e = bigInt("9999999");
console.log(x.modPow(e, N).toString());
<script src="https://peterolson.github.io/BigInteger.js/BigInteger.min.js"></script>
Автор решения: AlexShag
→ Ссылка
Благодаря Павел Ериков я порылся в исходниках https://peterolson.github.io/BigInteger.js/BigInteger.min.js
И вот что получилось.
function PowMod(x, e, N) {
var r = 1n, base = x % N;
while (e > 0) {
if (base == 0n) return 0n;
if ((e & 1n) === 1n) r = (r * base) % N; // Если не чётное
e = e >> 1n;
base = (base * base) % N;
}
return r;
}
Работает ещё быстрее чем в оригинале. Так что всем кому нужно пользуйтесь на здоровье :-)