web.config의 정보와 같은 중요한 정보를 보호하기 위해 .Net을 통해 mvc 응용 프로그램에서 작업하고 있습니다. 암호화하는 두 가지 기능이 있습니다. Triple DES를 사용하여 정보를 암호 해독합니다. 그러나 저는 이것에 익숙하지 않고 친구의 도움을 받아 여기서 여기 몇 가지 질문을하는 데 성공했습니다.암호화 된 문자열에 TDES IV (초기화 벡터)를 추가하고 검색하는 방법
현재 내가 갇혀있는 지점은 어떻게 암호화 된 문자열의 끝에 TDES IV (Initialization Vector)
을 추가 할 수 있으며 해독 중에 다시 검색하는 방법은 무엇입니까? 내 말은 암호화 된 정보에서 여기에서 IV (Initialization Vector)
개의 별을 어떻게 식별하겠습니까?
친절히 도움.
public static string Encrypt(string Message)
{
byte[] iv;
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
// Capture the randomly generated IV
iv = TDESAlgorithm.IV;
byte[] DataToEncrypt = UTF8.GetBytes(Message);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
//var lnght=Results.GetLength(0);
//System.Buffer.BlockCopy(iv, 0, Results, lnght + 1, iv.Length()); //HOW?
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return Convert.ToBase64String(Results);
//return Encoding.UTF8.GetString(Results);
}
public static string Decrypt(string Message)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
// Apply the same IV used during encryption
//TDESAlgorithm.IV = iv; // HOW?
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
try
{
byte[] DataToDecrypt = Convert.FromBase64String(Message);
//byte[] DataToDecrypt = UTF8.GetBytes(Message);
//byte[] DataToDecrypt = Encoding.UTF8.GetBytes(Message);
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); // << ERROR is here.
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return UTF8.GetString(Results);
}
…
…
…
우선 메시징은 오라클 패딩에 취약하기 때문에 무결성 검사가 필요합니다. 둘째, 적어도 CBC를 사용해야하거나 암호문 내에서 일반 텍스트를 구별 할 수 있습니다. 그런 다음 IV를 * ciphertext * 앞에 평평하게 놓아야합니다. PKCS # 7을 유지하면 적어도 문자 (문자) 인코딩/디코딩을 수행 할 수있는 충분한 포인트를 얻을 수 있습니다. 3DES 대신 AES를 사용하는 것도 아주 좋은 생각입니다. 모드 등을 올바르게 설정하는 것이 훨씬 더 중요합니다. –