3

私はRESTAPIを開発しています。HttpClientクライアントは、サーバーの公開鍵で暗号化した後、そのユーザー名とパスワードを認証ヘッダーに入れます。ユーザー名とパスワードは常にアルファベットと数字で構成されます。つまり、ASCIIで表すことができます。

このコードを暗号化に使用しています。

string encrypted = Encrypt (someText, crypto);

    public static string Encrypt (string plainText, RSACryptoServiceProvider crypto)
    {
        var plainData = GetBytes (plainText);
        var encryptedData = crypto.Encrypt (plainData, true);
        return GetString (encryptedData);
    }

    public static byte[] GetBytes (string str)
    {
        var bytes = new byte[str.Length * sizeof (char)];
        Buffer.BlockCopy (str.ToCharArray (), 0, bytes, 0, bytes.Length);
        return bytes;
    }

    public static string GetString (byte[] bytes)
    {
        var chars = new char[bytes.Length / sizeof (char)];
        Buffer.BlockCopy (bytes, 0, chars, 0, bytes.Length);
        return new string (chars);
    }

問題は、暗号化後にこの文字列を取得することです

꠨屰欧㼡⭮鍴⬎㔾䐛え멩戻덒郝㬭ே䉚ꑰ䵇᷹᷶虣ⱒ̿ঊࠎ飳枹鬭쉦폩ᤫ槺愐丄裘ډ졽肟䷋ٱ᮷튼쁡鮤붮飦ꃨ◡ 뉋⭠夏旻浨፛᠏რ

これらのUnicode文字を認証ヘッダーで送信できません。暗号化されたテキストをASCIIで取得して、HttpClient経由で簡単に送信できるようにする方法はありますか?

4

1 に答える 1

2

あなたはそれをbase64エンコードすることができます。Base64エンコーディングは、ASCII文字列をサポートするトランスポートを介して送信するのに適した文字列を生成します。

public static string Encrypt (string plainText, RSACryptoServiceProvider crypto)
{
    var plainData = GetBytes (plainText);
    var encryptedData = crypto.Encrypt (plainData, true);
    return Convert.ToBase64String (encryptedData);
}

ところで、文字列をバイトの配列に変換するためのカスタムGetBytesメソッドをEncoding.GetBytes;に置き換えます。これは、組み込みの推奨される方法です。例えば:

var plainData = System.Text.Encoding.UTF8.GetBytes(plainText);
于 2013-02-12T19:39:38.697 に答える