首页 > 解决方案 > 匹配 C# 中的 Javascript RSA 加密

问题描述

我正在尝试在 C# 中转换一个 JavaScript 加密函数。但没有得到有效的输出。有人可以帮我解决这个问题。下面是我用于加密的 JavaScript 函数

function encryptPassword()
{
    var password="samplepassword";      mod="ce33b5600160ba9354a0e56ee3e43369e9a824e0f88e20ad52bbde015cc8c8fed57aa2d65c4eb13dc099f38718fcbc471e60bb4d82a5e05b6a64c5dc8d2e17ca44c205a6c54540d4884285808e829043b2f11838dc5d603750616bf5fd711d810b50f7a468e31d0cfc5b70e6a72fe887a2e26db44c3868a86febb5e4c5f6c27000b202a0460488db3eac48f1ee80e7ca6bb8a9af2b985c28aa25ecdc74e485abd20311c21add507e8c65c3d11d743ebbd76c44933bb68981e1171376d1ddf33607fa2116cb747f0c3f238bae5b01878004157cfef9c8cdd697ee39759625f84abd89469a8b8cd9eabb2e79fd9269ab4e62670d6ec8b5b1f6d986385b2394bfdb";

    var rsa = new RSAKey();
    rsa.setPublic(mod, "10001");
    var res = rsa.encrypt(password);
    if(res) {
        document.getElementById('password').value=res;
            return true;
    }
    else
    {
        return false;
    }
}

下面是我的 C# 实现。但不知何故,我没有得到正确的输出。C# 生成的输出未在服务器端验证。

C# 代码

public static string EncryptRSAx(string public_keyHex, uint exp, string data)
{
    byte[] bytes = new byte[public_keyHex.Length / 2];
    for (int i = 0; i < public_keyHex.Length - 1; i += 2)
    {
        bytes[i / 2] = byte.Parse(public_keyHex.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
    }
    string public_key = Convert.ToBase64String(bytes);
    return RSAEncrypt(public_key, Convert.ToBase64String(BitConverter.GetBytes(exp)), data);
}

public static string RSAEncrypt(string public_key, string exponent, string data)
{         
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    //rsa.FromXmlString()
    rsa.FromXmlString(String.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>", public_key, exponent));
    byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data);
    byte[] cipherbytes = rsa.Encrypt(plainbytes,false);     

    return Convert.ToBase64String(cipherbytes);
}

标签: javascriptc#encryptionrsa

解决方案


推荐阅读