簡體   English   中英

使用指數,模量和基數作為參數的c#中的RSA加密

[英]RSA Encryption in c# using Exponent, Modulus and Base as parameters

我有一個使用擴展程序來處理密碼的專有應用程序。 為了加密字符串,我將指數,模量,基數和字符串作為參數輸入。 它返回加密的字符串。

我需要能夠在與專有應用程序通信的ac#應用程序中復制此功能。 我不確定從何處開始-會感謝您能提供的任何幫助。

這就是我目前所擁有的;

public class Cryptography
{
    public static RSACryptoServiceProvider rsa;

    public static void AssignParameter()
    {
        const int PROVIDER_RSA_FULL = 1;
        const string CONTAINER_NAME = "SpiderContainer";
        CspParameters cspParams;
        cspParams = new CspParameters(PROVIDER_RSA_FULL);
        cspParams.KeyContainerName = CONTAINER_NAME;
        //cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
        cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
        rsa = new RSACryptoServiceProvider(cspParams);
    }

    public static string Sencrypt(string input)
    {

        RSAParameters parameters = new RSAParameters();
        parameters.Modulus = System.Text.Encoding.Unicode.GetBytes("nononomonomnomfoononmo");
        parameters.Exponent = System.Text.Encoding.Unicode.GetBytes("b");
        rsa.ImportParameters(parameters);

        byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(input);
        byte[] cipherbytes = rsa.Encrypt(plainbytes, false);

        System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
        //return enc.GetString(cipherbytes);
        return Convert.ToBase64String(cipherbytes);

    }
} 

當我使用專有應用程序加密數據,然后嘗試使用上面的代碼時-生成的加密數據有所不同。

我對如何進行一無所知。

編輯; 每次運行時,它都會返回一個不同的字符串。 使用相同的輸入字符串。

如果我正確理解您的問題,那么GregS是正確的。 程序可以通過多種方式對密鑰和密文進行編碼。 不幸的是,如果您沒有擴展程序正在使用的協議或文件格式的規范,則必須對其進行反向工程。

您評論了程序每次運行都會返回不同的字符串這一事實。 這是RSA的屬性,實際上是任何公鑰加密原語。 確定性算法(即,在給定相同輸入的情況下始終返回相同輸出的非隨機算法)不能用作公鑰加密原語,因為它們很容易受到明文攻擊。

編輯:這意味着您對明文進行加密並將結果與​​模塊輸出進行比較的方法將不起作用。 相反,一旦您相信找到擴展模塊已散發出來的RSA輸出,請嘗試對其解密。

您的參數初始化有點奇怪。 您確定得到有效的模數結果(以下字節表示形式)嗎?

6E006F006E006F006E006F006D006F006E006F006D006E006F006D0066006F006F006E006F006E006D006F006

和指數:

6200

我認為它們是錯誤的,因為Unicode編碼具有特殊性。 您可能只是打錯了打字,想使用System.Text.Encoding。 UTF8 .GetBytes。

Modulus的結果將更好:

6E6F6E6F6E6F6D6F6E6F6D6E6F6D666F6F6E6F6E6D6F

但總的來說,我建議使用Base64進行鍵或鍵部分的傳輸,而不是UTF-8字符串。

另外,您不指定使用的密鑰大小。 默認為1024嗎?

因此,我建議嘗試使用UTF8並檢查密鑰大小。 希望對您有所幫助。

也許此鏈接對您也很有趣所有關於RSAParameters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM