"잘못된 데이터"오류를 생산하는 클래스 :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
}
}
}
내가 저를 암호화하는 바이트 배열을 전달하기 전에 인코딩을 확인할 수 있도록 할이 클래스에서 변경할 수 있나요/복호화?
BTW ... 내가 여기 어딘가에 참조를 가지고있는 것처럼 보인다,하지만 난 좌절되는 것을하고, 내가 읽고 컴파일이 아닌 다른 뭔가를 중지하면 나는 적어도 도움이 될 생각 ,이 클래스를 호출하여 Nini 초기화 프레임 워크를 사용하여 XML 파일에 대한 비밀번호를 작성합니다. http://nini.sourceforge.net/manual.php#ASimpleExample
또한, 나는 내가 XML 파일을 작성하기 전에 파일 인코딩 (UTF-8)를 변경하는 Notepad2을 사용했다.
처음 컴파일 한 후 프로그램이 중단 된 후였습니다. 디버거를 사용하여 메모리의 XML 데이터 (UTF-8)와 디스크의 데이터 (ANSI)간에 인코딩이 다르다는 것을 알 수있었습니다.
현재로서는 그렇지 않지만 RSAcrypt()의 Decrypt 부분에서 반환 된 잘못된 데이터를 참조하여 프로그램이 여전히 중단됩니다.
(내 좌절감을 설정하기 전에 Encrypt와 Decrypt가 동일한 메소드 였지만 기능은 동일하지만 잘못된 데이터 클레임과 관련된 추가 예외 정보를 캡처하려고했습니다. 물론, 내 좌절감을 내 코드에 허락하는 것을 허용했다 ;-))
어떤 제안, 아이디어 또는 참고 사항도 좋을 것이다. 당신은 암호화하고 해독 어디 생성자가
RSACryptoServiceProvider thisRSACryptoServiceProvider = new RSACryptoServiceProvider();
때문에, 당신은 암호화되어 있습니다 : 당신은 당신이 키 쌍마다 새로운 RSA를 생성
생성자 내부
a 파일에 저장할 데이터를 암호화하려면 AES를 사용하십시오. 그것은 더 성능이 좋으며 대칭 암호입니다. – Alan
민감한 데이터를 2 차 파티에 전달하는 경우 RSA가 더 적합합니다. – Alan
감사합니다. Alan, 응용 프로그램이 작동하면 다른 암호로 이동할 계획이었습니다. 시스템은 물리적 인 액세스가 제한된 사설 서브넷에 있지만 DB에 개인 정보를 쓰게되므로 모든 정보를 암호화해야합니다. 다시 한 번 감사드립니다. E – EtherealMonkey