으로 변환 누군가 다음 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 바이트이지만 오라클이 텍스트를 어떻게 암호화했는지 알아 냈습니다. 그리고 오라클과 동일한 출력을 얻기 위해 코드를 어떻게 변경합니까?
키 길이가 너무 짧아서 15 자 미만으로 암호화 할 수 없습니다. 나는 그것이 원시 일 것 같다고 생각한다. 오라클은 바이트를 2 바이트로 변환한다. – user1429899
** [this] (http://docs.oracle.com/cd/B10500_01/appdev.920/a96612/d_obtoo2.htm) ** : _ 키 길이가 없거나 8 바이트 미만인 경우 , ORA-28234 "Key length too short"오류가 발생합니다. 큰 키를 사용하면 여분의 바이트가 무시됩니다. 따라서 9 바이트 키는 예외를 생성하지 않습니다. _ – Brad
또한 원시에 할당 한 오라클의 키 문자열에 사용되는 인코딩은 무엇입니까? – Brad