「不正データ」エラーを生成し、クラス:System.Security.Cryptographyと "Bad Data" - 文字エンコーディング?
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
namespace MyNameSpace
{
public class RSAcrypt
{
private string _encryptedData;
private string _decryptedData;
public string EncryptedData
{
get { return _encryptedData; }
set { _encryptedData = value; }
}
public string DecryptedData
{
get { return _decryptedData; }
set { _decryptedData = value; }
}
public RSAcrypt()
{
}
/// <param name="CryptAction"> The action to perform on the string {Encrypt|Decrypt} </param >
/// <param name="StringToCrypt"> A string to perform the Action on </param>
public RSAcrypt(string CryptAction, string StringToCrypt)
{
UnicodeEncoding thisUnicodeEncoding = new UnicodeEncoding();
RSACryptoServiceProvider thisRSACryptoServiceProvider = new RSACryptoServiceProvider();
byte[] _stringToCrypt = thisUnicodeEncoding.GetBytes(StringToCrypt);
switch (CryptAction)
{
case "Encrypt":
byte[] encryptedData = Encrypt(_stringToCrypt, thisRSACryptoServiceProvider.ExportParameters(false));
_encryptedData = thisUnicodeEncoding.GetString(encryptedData);
break;
case "Decrypt":
byte[] decryptedData = Decrypt(_stringToCrypt, thisRSACryptoServiceProvider.ExportParameters(true));
_decryptedData = thisUnicodeEncoding.GetString(decryptedData);
break;
default:
break;
}
}
static private byte[] Encrypt(byte[] DataToEncrypt, RSAParameters keyInfo)
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(keyInfo);
return RSA.Encrypt(DataToEncrypt, false);
}
static private byte[] Decrypt(byte[] DataToDecrypt, RSAParameters keyInfo)
{
#region Temporary Assignment - Remove before build
byte[] tmpVal = null;
#endregion
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
try
{
RSA.ImportParameters(keyInfo);
#region Temporary Assignment - Remove before build
tmpVal = RSA.Decrypt(DataToDecrypt, false);
#endregion
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message, "Exception Thrown");
}
#region Temporary Assignment - Remove before build
return tmpVal;
#endregion
}
}
}
は私が前に/復号化を暗号化するために、バイト配列を渡すにエンコーディングをチェックできるようになる私は、このクラスに変更できることはありますか?
ところで...私はどこかこの辺りの参照を持っているように思えるが、私はイライラになるのです、私は読んでコンパイルする以外の何かを停止した場合、私はそれが、少なくとも役立つだろうと思いました私はこのクラスを呼び出して、Nini初期化フレームワークを使用してXMLファイルへのパスワードに書き込みます。 http://nini.sourceforge.net/manual.php#ASimpleExample
また、私はXMLファイルに書いた前に、ファイルのエンコーディング(UTF-8)を変更するNotepad2を使用しました。
初めてコンパイルした後にプログラムが停止した後です。デバッガを使用して、メモリ(UTF-8)のXMLデータとディスク(ANSI)のデータのエンコーディングが異なることがわかりました。
これは当てはまりませんが、プログラムはまだ停止し、RSAcrypt()のDecrypt部分から返された不良データを参照します。
(私のフラストレーションが設定される前にEncryptとDecryptが同じメソッドであったことにも注意してください。同じ機能を果たしますが、間違ったデータクレームに関連する追加例外情報をキャプチャしようとしました。私の不満が私のコードをハンディキャップできるようにしました;-))
どのような提案、アイデアや参考資料が素晴らしいでしょう。あなたが暗号化と復号化どこコンストラクタがある
RSACryptoServiceProvider thisRSACryptoServiceProvider = new RSACryptoServiceProvider();
ので、あなたが暗号化されている:あなたはあなたが鍵ペアごとに新しいRSAを生成
あなたのコンストラクタ内
aファイルに格納するデータを暗号化する場合は、AESを使用します。よりパフォーマンスが高く、対称暗号です。 – Alan
機密データをセカンダリパーティに渡す場合は、RSAが適しています。 – Alan
アラン、ありがとう、私はアプリケーションが動作している別の暗号に移動する予定だった。システムは物理的なアクセスが制限されたプライベートサブネット上に置かれますが、個人情報をDBに書き込むので、すべての情報を暗号化する必要があります。 お返事ありがとうございます。E – EtherealMonkey