現在、バイト配列から変換された文字列を返すメソッドがあります。
public static readonly UnicodeEncoding ByteConverter = new UnicodeEncoding();
public static string Decrypt(string textToDecrypt, string privateKeyXml)
{
if (string.IsNullOrEmpty(textToDecrypt))
{
throw new ArgumentException(
"Cannot decrypt null or blank string"
);
}
if (string.IsNullOrEmpty(privateKeyXml))
{
throw new ArgumentException("Invalid private key XML given");
}
byte[] bytesToDecrypt = Convert.FromBase64String(textToDecrypt);
byte[] decryptedBytes;
using (var rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKeyXml);
decryptedBytes = rsa.Decrypt(bytesToDecrypt, FOAEP);
}
return ByteConverter.GetString(decryptedBytes);
}
代わりに を返すようにこのメソッドを更新しようとしていますが、 の戻り値をからにSecureString
変換するのに問題があります。私は次のことを試しました:RSACryptoServiceProvider.Decrypt
byte[]
SecureString
var secStr = new SecureString();
foreach (byte b in decryptedBytes)
{
char[] chars = ByteConverter.GetChars(new[] { b });
if (chars.Length != 1)
{
throw new Exception(
"Could not convert a single byte into a single char"
);
}
secStr.AppendChar(chars[0]);
}
return secStr;
ただし、この SecureString equality testerを使用すると、結果は元の暗号化されていないテキストから構築されたものSecureString
と等しくありませんでした。SecureString
私の Encrypt メソッドと Decrypt メソッドは、以前はstring
どこでも使用していたときに機能し、SecureString
等価コードもテストしたので、ここでの問題は に変換しようとしている方法にあると確信していbyte[]
ますSecureString
。RSA 暗号化を使用するために取るべき別のルートはありSecureString
ますか?
編集:SecureString
バイト配列を通常の文字列に変換してから、その文字列を aに詰め込みたくありませんでしたSecureString
. Decrypt
ただし、返されるのも悪いので、byte[]
そのバイト配列をに詰め込もうとしていSecureString
ますか? 私の推測では、 ifDecrypt
が a を返す場合byte[]
、それは機密情報を安全に渡す方法なので、データの 1 つの安全な表現を別の安全な表現に変換しても問題ないようです。