【发布时间】:2013-04-30 06:33:27
【问题描述】:
谁能指导我如何将以下 Oracle 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 个字节,但是 Oracle 是如何加密我的文本的?以及如何更改我的代码以获得与 Oracle 相同的输出?
【问题讨论】:
标签: c# encryption plsql des