2013-04-30 1 views
0

으로 변환 누군가 다음 PL/SQL 코드를 C#으로 변환하는 방법을 안내해 줄 수 있습니까?오라클 PL/SQL 코드를 C#

declare 
    l_encrypted raw (100); 
    p_key raw (100); 
    p_plain raw(100); 
    l_mode number; 
begin 
    l_mode := dbms_crypto.ENCRYPT_DES + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5; 
    p_key := 'A217B5BEF1477D1A'; 
    p_plain := '07253075'; 
    l_encrypted := dbms_crypto.encrypt(UTL_I18N.STRING_TO_RAW(p_plain, 'AL32UTF8'), l_mode, p_key); 
    dbms_output.put_line(l_encrypted); 
    --outputs this value: E4624E16DB69451A14BE265CDCC5B0AB 
end; 

내 C# 코드는 다음과 같습니다

 byte[] value = Encoding.UTF8.GetBytes("07253075"); 
     byte[] key = Encoding.UTF8.GetBytes("A217B5BEF1477D1A"); 
     DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider 
     { 
      Mode = CipherMode.CBC, 
      Padding = PaddingMode.PKCS7, 
     }; 
     MemoryStream memoryStream = new MemoryStream(); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(key, key), CryptoStreamMode.Write); 
     cryptoStream.Write(value, 0, value.Length); 
     cryptoStream.Close(); 
     Byte[] encrypted = memoryStream.ToArray(); 
     MessageBox.Show(string.Join(string.Empty, Array.ConvertAll(encrypted, b => b.ToString("X2")))); 

그러나 CryptographicException이 키 크기의 불평 발생합니다. 나는 인터넷을 검색하여 DES의 키 크기가 8 바이트이지만 오라클이 텍스트를 어떻게 암호화했는지 알아 냈습니다. 그리고 오라클과 동일한 출력을 얻기 위해 코드를 어떻게 변경합니까?

답변

0

DES는 전통적으로 메시지를 암호화하는 데 56 비트 만 사용되는 64 비트 키를 허용합니다. DESCryptoServiceProvider의 KeySize 속성을 128로 설정하고 이것이 어떻게 진행되는지 볼 수 있습니다.

키 전체가 사용 되었습니까? 이 경우의 doco

ENCRYPT_DES 데이터 암호화 표준입니다. 블록 암호. 56 비트의 키 길이를 사용합니다.

키의 처음 56 비트 만 사용한다고 가정합니다 (처음 7 자). 첫 번째 7자를 사용하여 oracle에서 암호화 방법을 실행하고 결과가 모두 16인지 비교해 볼 수 있습니다.

128 비트 키를 실제로 사용하려면 /해야합니다. 트리플 DES 또는 AES로 이동합니다.

+0

키 길이가 너무 짧아서 15 자 미만으로 암호화 할 수 없습니다. 나는 그것이 원시 일 것 같다고 생각한다. 오라클은 바이트를 2 바이트로 변환한다. – user1429899

+0

** [this] (http://docs.oracle.com/cd/B10500_01/appdev.920/a96612/d_obtoo2.htm) ** : _ 키 길이가 없거나 8 바이트 미만인 경우 , ORA-28234 "Key length too short"오류가 발생합니다. 큰 키를 사용하면 여분의 바이트가 무시됩니다. 따라서 9 바이트 키는 예외를 생성하지 않습니다. _ – Brad

+0

또한 원시에 할당 한 오라클의 키 문자열에 사용되는 인코딩은 무엇입니까? – Brad

관련 문제