如何对字符(TypeScript)进行基本加密?

How to do basic encryption on characters (TypeScript)?

我想用 RSA public 和私钥加密一个字符串。但是,当我尝试将字符解密回初始 ascii 值时,它们 return 有所不同。下面是我加解密的方法:

/**
 * Method to encrypt a string using associated public-key
 * @param plainText string to cipher
 * @returns string of encrypted plainText
 */
public encryptData(plainText: string): string {
    let cipher = "";
    for (let i = 0; i < plainText.length; i++) {
        console.log(plainText.charCodeAt(i));
        let temp: number = Math.pow(plainText.charCodeAt(i), this.e) % this.n;
        console.log(String.fromCharCode(temp).charCodeAt(i));
        cipher += String.fromCharCode(temp);
    }
    return cipher;
}

/**
 * Method to decrypt a string using associated private-key
 * @param cipherText string to decrypt
 * @returns string of encrypted plainText
 */
public decryptData(cipherText: string): string {
    let text = "";
    for (let i = 0; i < cipherText.length; i++) {
        console.log(cipherText.charCodeAt(i));
        let temp: number = Math.pow(cipherText.charCodeAt(i), this.d) % this.n;
        text += String.fromCharCode(temp);
    }
    return text;
}

ned分别为15、7、13。如有任何建议,我们将不胜感激!

编辑

找到了解决问题的方法,在创建变量时使用下面的方法temp

private modular_pow(base: number, expo: number, modulo: number) {
    base = base % modulo;
    var result = 1;
    var x = base;
    while(expo > 0){
        var leastSignificantBit = expo % 2;
        expo = Math.floor(expo / 2);
        if (leastSignificantBit == 1) {
            result = result * x;
            result = result % modulo;
        }
        x = x * x;
        x = x % modulo;
    }
    return result;
}

模数N的大小决定教科书RSA的最大载荷。因为它是值 15,所以消息值必须是 14 或更低。

字符通常至少在 0..25 范围内,这不是字符值,而是字母表中的索引。因此,要么进一步拆分字符,要么需要使用更大的模数(例如 p = 7、q = 19 和所有重要的 n=133,它们能够处理任何 ASCII 字符(当然在可打印字符之外徘徊)某些值的 ASCII)。

请注意,如果您的 RSA 组件较大,则必须使用 a specialized algorithm 执行模幂运算,而不是先执行幂运算,然后再进行模计算,后者效率非常低,并且可能会导致在求幂步骤中整数溢出(或类似的东西)。

另请注意,教科书 RSA 的输出必须放入方案中的(可打印)字符中。作为练习,您也可以只使用由 space 分隔的数字,忽略密文的增长。