簡體   English   中英

RSA加密/解密的結果帶有3個問號

[英]Result of RSA encryption/decryption has 3 question marks

我正在使用RSA加密和解密1或2個單詞的小型記事本文件。 處理文件結果后,結果請求上有3個問號。

例如,如果我加密然后用單詞“ Hello”解密記事本文件,則結果將是“ ??? Hello”。 那三個問號來自哪里?

這是代碼:

    public partial class Form1 : Form
{

    private RSAParameters publicKey;
    private RSAParameters privateKey;

    public string result;

    public Form1()
    {
        InitializeComponent();
        var rsa = new RSACryptoServiceProvider();
        this.publicKey = rsa.ExportParameters(false);
        this.privateKey = rsa.ExportParameters(true);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        openFileDialog1.ShowDialog();
    }

    private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
    {
        textBox1.Text = openFileDialog1.FileName;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        FileStream fileStream = new FileStream(textBox1.Text, FileMode.Open);

        byte[] buffer = new byte[fileStream.Length];
        int len = (int)fileStream.Length;
        fileStream.Read(buffer, 0, len);

        var rsa = new RSACryptoServiceProvider();
        rsa.ImportParameters(publicKey);

        var encrypted = rsa.Encrypt(buffer, false);

        result = Convert.ToBase64String(encrypted);
        MessageBox.Show(result);
    }

    private void button3_Click(object sender, EventArgs e)
    {

        var rsa = new RSACryptoServiceProvider();
        rsa.ImportParameters(privateKey);

        byte[] toDecode = Convert.FromBase64String(result);

        var decrypted = rsa.Decrypt(toDecode, false);

        string msg = Encoding.ASCII.GetString(decrypted);
        MessageBox.Show(msg);
    }
}

您的輸入文件編碼可能是UTF8,並且正在將其解碼為ASCII。 嘗試改變

string msg = Encoding.ASCII.GetString(decrypted);

string msg = Encoding.UTF8.GetString(decrypted);

問號由文本前面的字節順序標記(BOM)生成。 對於不需要BOM的UTF-8並不常見。 對於UTF-16來說,字節序是個問題,但這種情況更為常見,但是由於其余的純文本似乎都已解碼為ASCII,因此無法對其進行UTF-16編碼。

請注意,ASCII不能顯示任何值為127(十六進制為7F )或更高的字符。 .NET平台似乎用問號默默地替換了BOM值。

暫無
暫無

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

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