0

このWebサイトから生成された秘密鍵と公開鍵を使用して暗号化および復号化するプログラムを作成しています-rsa_key_generation

キーサイズを 512 と base64 に設定しました。そして、ここに私のコードがあります。

class Program
{
    private static RSACryptoServiceProvider _rsaProvider = new RSACryptoServiceProvider();
    static string p = "DYy2r60MEQJR2gyYmkuEQp7F8a2D=rOjd60tOR=FF8Z";
    static string q = "8_oSxChqnGrGHTW0gt4CggZ2pOQZI8SR1uFWZIn4yRr";
    static string mod = "1vg1y6ZmYtGILIVgbgezzwUcnnmSRp1hwQuxRTIiQNbrz=fi4myRn7KwJyG2aKDEG69pseLMqetYYCTQUKCyr=";
    static string exp = "G01";
    static string d = "1khYtBuSMaCtYf7ECrIV6=b36bBGwxUvzTUrwQvRJNf70h0sFNnxBARiNrZdb8DWJsgjQEKhBUcWOD4aII1xv1";
    static string dP = "6VTNXCrpUJP_tbJbzCA_s38haB_T3IEGWYC_1pCpha=";
    static string dQ = "3=p7GQ9v613wldg8eSEdxNCvRfeIfBvhomPdigmMwhP";

    static void Main(string[] args)
    {

        string encryptedPIN = RSAEncrypt("1234");
        Console.WriteLine("Encrypted Text Recieved: " + encryptedPIN);
        string decryptedPIN = RSADecrypt(encryptedPIN);
        Console.WriteLine("\nDecrypted Text Recieved: " + decryptedPIN);
        Console.ReadLine();
    }

    public static string RSAEncrypt(string plainText)
    {
        AssingParams();

        RSAParameters rsaParam = new RSAParameters();

        rsaParam.Modulus = Encoding.UTF8.GetBytes(mod);
        rsaParam.Exponent = Encoding.UTF8.GetBytes(exp);            

        _rsaProvider.ImportParameters(rsaParam);

        byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
        byte[] cipherBytes = _rsaProvider.Encrypt(plainBytes, false);
        return Convert.ToBase64String(cipherBytes);
    }

    public static string RSADecrypt(string cipherText)
    {
        AssingParams();
        byte[] cipherBytes = Convert.FromBase64String(cipherText);
        RSAParameters rsaParam = new RSAParameters();

        rsaParam.Modulus = Encoding.UTF8.GetBytes(mod);
        rsaParam.D = Encoding.UTF8.GetBytes(d);
        rsaParam.Exponent = Encoding.UTF8.GetBytes(exp);
        rsaParam.Q = Encoding.UTF8.GetBytes(q);
        rsaParam.DP = Encoding.UTF8.GetBytes(dP);
        rsaParam.DQ = Encoding.UTF8.GetBytes(dQ);

        _rsaProvider.ImportParameters(rsaParam);

        byte[] plainText = _rsaProvider.Decrypt(cipherBytes, false);
        return Encoding.UTF8.GetString(plainText);
    }

    public static void AssingParams()
    {
        const int PROVIDER_RSA_FULL = 1;
        const string CONTAINER_NAME = "RSAContainer";
        CspParameters cspParams;
        cspParams = new CspParameters(PROVIDER_RSA_FULL);
        cspParams.KeyContainerName = CONTAINER_NAME;
        cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
        _rsaProvider = new RSACryptoServiceProvider(1024, cspParams);
    }       
}

文字列 p、q、mod、exp、d、dP、および dQ として宣言された変数は、Web サイトからコピーされます。暗号化は復号化で正常に機能しますが、このエラー「Bad Data」が表示されます。モジュラスを復号化キーに追加しようとすると、「キーが存在しません」というエラーが表示されます。

助けてください。

4

2 に答える 2

0

それがまったく機能すると確信していますか?

宣言さcspParams れる前にどのように使用できますか?

驚かない

return Encoding.UTF8.GetString(plainText);

エラーを示します。plainText現在のコンテキストには存在しません。

示されたメソッドの外で宣言された変数を使用していますか? その場合は、それらの可視性を確認してください。

于 2013-08-14T14:59:09.010 に答える