我有以下 ElGamal 加密方案
const forge = require('node-forge');
const bigInt = require("big-integer");
// Generates private and public keys
function keyPairGeneration(p, q, g) {
var secretKey = bigInt.randBetween(2, q.minus(2));
var publicKey = g.modPow(secretKey, p);
const keys = {
secret: secretKey,
public: publicKey
}
return keys;
}
// Generates a proxy and a user key
function generateProxyKeys(secretKey) {
const firstKey = bigInt.randBetween(1, secretKey);
const secondKey = secretKey.minus(firstKey);
const keys = {
firstKey: firstKey,
secondKey: secondKey
}
return keys;
}
// Re-encrypts
function preEncrypt(p, q, g, m, publicKey) {
const k = bigInt.randBetween(1, q.minus(1));
const c1 = g.modPow(k, p);
// g^x = publicKey
// m.publicKey^k
const c2 = bigInt(m).multiply(publicKey.modPow(k, p)).mod(p);
const c = {
c1: c1,
c2: c2
}
return c;
}
function preDecrypt(p, c1, c2, key) {
// (mg^xr) / (g^rx1)
var decrypt = c2.multiply(c1.modPow(key, p).modInv(p)).mod(p);
return decrypt;
}
这适用于数字。但是,我希望能够使用它来加密字符串(顺便说一句,它不是常规的 ElGamal,我认为区别与此上下文无关,但有关更多详细信息,请参阅我问的这个问题)
我考虑将字符串转换为整数,运行加密,并在需要时转换回字符串。我在 JS 中找不到这样做的方法(这里发布了这个问题,但代码不起作用)。还有另一个类似的问题,但它在 Java 中,并且提到的方法不是由 JS 中的 BigInt 实现提供的。
有什么简单的方法可以将字符串转换为 BigInt?