将Oracle PL/SQL代码转换为C#

将Oracle PL/SQL代码转换为C#,c#,encryption,plsql,des,C#,Encryption,Plsql,Des,有人能指导我如何将以下Oracle PL/SQL代码转换为C#吗 我的C#代码是: 但是,它会抛出加密异常,抱怨密钥大小。我搜索了互联网,发现DES的密钥大小是8字节,但Oracle是如何加密我的文本的呢?如何更改代码以获得与Oracle相同的输出 DES传统上接受64位密钥,其中只有56位用于加密消息。您可以尝试将DESCryptoServiceProvider的KeySize属性设置为128,然后查看它的运行情况 你确定整把钥匙都用过了吗?这方面的建议如下: 加密 数据加密标准。分组密码。使

有人能指导我如何将以下Oracle PL/SQL代码转换为C#吗

我的C#代码是:


但是,它会抛出加密异常,抱怨密钥大小。我搜索了互联网,发现DES的密钥大小是8字节,但Oracle是如何加密我的文本的呢?如何更改代码以获得与Oracle相同的输出

DES传统上接受64位密钥,其中只有56位用于加密消息。您可以尝试将DESCryptoServiceProvider的KeySize属性设置为128,然后查看它的运行情况

你确定整把钥匙都用过了吗?这方面的建议如下:

加密 数据加密标准。分组密码。使用56位的密钥长度

我假设只使用密钥的前56位(前7个字符)。您可以尝试在oracle中使用前7个字符运行加密方法,并查看输出是否与所有16个字符相同


如果是这种情况,并且您确实希望/需要使用128位密钥,则应向上移动到三重DES或AES。

它不允许我使用少于15个字符进行加密,并抱怨密钥长度太短。我认为,由于它是原始的,Oracle将其转换为每个字节2个字符的字节。请查看:如果缺少密钥长度或小于8个字节,则该过程会引发错误ORA-28234“密钥长度太短”。请注意,如果使用较大的密钥,则会忽略额外的字节。因此,9字节的密钥不会生成异常。在oracle中,分配给原始密钥的密钥字符串的编码是什么?
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;
        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"))));