2011-03-22 3 views
0

AES로 암호화 된 값을 고객에게 보내야하는 사람을 돕고 있습니다. 고객이 블록 암호 모드, 패딩 또는 키 생성 방법을 지정하지 않았습니다. 이어서AES 암호화의 암호화 모드/패딩 기본값 또는 일반적인 용도가 .NET에서 사용됩니까?

, 256의 키 크기와 AES에게 암호화 방식을 이용하여 길이가 0 (또는 길이 16 바이트 배열 DOTNET의 경우) 및 키 의 벡터 문자열을 암호화 : 그들은 만이 상기 한 "XXX"의

이 중 XXX 키는 19 자입니다. 내가 언급 한 이후 .NET을 사용하고 있다고 가정하고 있습니다. .NET에 익숙한 사람이라면 키에 대한 19 자 문자열만으로도 무엇을 제안 할 수 있는지 알고 있습니까? 우리는 암호화에 익숙하며 우리 편에서 Java를 사용할 것입니다. 그러나 AES 키를 생성하는 방법과 사용할 암호 모드와 패딩을 알 수있는 방법이 없으면 더 이상 갈 수 없습니다. 고객이 질문에 매우 빠르게 반응하지 않으므로 여기에서 묻는 것이 좋습니다. 감사!

답변

2

문자열을 키로 사용하는 .net의 Aes 클래스에는 생성자 또는 메서드가 없습니다. 키는 배열의 길이가 키 크기/8과 같아 지도록 바이트 배열로 지정됩니다.

일반적인 해시 알고리즘을 사용하여 19 자 문자열에서 키를 생성하기를 바랍니다. 가장 좋은 방법은 문자열의 Sha256 해시 일 것입니다.

그냥 ... 당신에게 .NET 측의 코드 샘플에 대한

public void InitializeCrypto() 
     { 
      var utf8 = new UTF8Encoding(); 
      var hash = new SHA256CryptoServiceProvider(); 
      var aes = new AesCryptoServiceProvider(); 
      var iv = new byte[16]; 

      Array.Clear(iv, 0, iv.Length); 
      string key = "Some19CharacterString"; 
      var utf8Bytes = utf8.GetBytes(key); 
      aes.IV = iv; 
      aes.KeySize = 256; 
      aes.Key = hash.ComputeHash(utf8Bytes); 
      //Do crypto work 

     } 
+0

덕분에 그 그물에서 어떻게 보이는지의 아이디어를 제공합니다. 나는 열쇠를 위해 문자열을 직접 가져간 것이 없다고 생각했습니다. SHA-256이 문자열 키를 해싱하는 데 가장 적합하다는 데 동의합니다. 불행히도 그들은 그렇게하는 것을 꺼려했습니다. 나는 그들이 제공 한 예제로 몇 가지 추측을함으로써이 작업을 할 수있었습니다 (물론 나는 포함 할 수 없었습니다). 나는 그들의 출력을 PKCS # 7 패딩을 사용하는 CBC 모드와 문자 그대로 문자의 원시 바이트에 이어 0으로 매치시켰다. 그들의 생각은 좋지 않지만 우리가 통제 할 수는 없습니다. – WhiteFang34

관련 문제