2

この記事http://www.codeproject.com/KB/security/DotNetCrypto.aspxを参照し、プレーン テキストの代わりに暗号化された文字列を書き込もうとしています。以下は私が使用しているコードです:

TextWriter tw = new StreamWriter("c:\\temp\\test.txt");
string plainString = "String to be encrypted";
PasswordDeriveBytes pdb = new PasswordDeriveBytes("Test",new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d,0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
Rijndael alg = Rijndael.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
tw.WriteLine(alg.IV.ToString());
MemoryStream ms = new MemoryStream(); 
CryptoStream cs = new CryptoStream(ms,alg.CreateEncryptor(), CryptoStreamMode.Write);
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(plainString);
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
tw.WriteLine(ms.ToString());
ms.Close();
tw.Flush();

ただし、ファイルを開くと、System.IO.MemoryStream代わりに暗号化された文字が表示されます。私は何を取りこぼしたか?

4

3 に答える 3

0

MemoryStream.ToString()は、クラス名を書き出すObject.ToString()のデフォルトの実装に依存しています。FileStreamを作成し、それをCryptoStreamコンストラクターに渡します。

http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx

于 2010-12-22T04:32:09.203 に答える
0

.net は、MD5 アルゴリズムを使用して文字列を暗号化することを非常にうまくサポートしていると思います。MD5 を使用する場合は、次のコードを参照してください。

private void encrypt(ref string password)
    {
        Int32 counter;
        Char[] passwordArr;
        String encryptedPassword;
        Byte[] hashedPassword;
        MD5CryptoServiceProvider obj = new MD5CryptoServiceProvider();

        passwordArr = password.ToCharArray();
        Byte[] passwordBytes = new byte[passwordArr.Length - 1];
        for (counter = 0; counter < passwordBytes.Length; counter++)
        {
            passwordBytes[counter] = Convert.ToByte(passwordArr[counter]);
        }
        hashedPassword = obj.ComputeHash(passwordBytes);
        encryptedPassword = BitConverter.ToString(hashedPassword);
        password =  encryptedPassword;
        obj = null;
    }
于 2010-12-22T04:41:23.497 に答える
0

問題は ms.ToString() にあります。むしろ、メモリストリームからバイトを読み取り、適切なエンコーディングに変更してから、テキスト ストリームに書き込む必要があります。

于 2010-12-22T04:41:39.577 に答える