C#的DES加密出来结果不对,求解
在oracle中有个DES加密函数,现在需要将它改写到C#,但写完以后测试发现同样的文本和密钥,加密出来的结果不一样,怎么都找不到问题。后来到网上找了一个在线DES加密的工具,加出来又是另外一个结果。到底是哪里出了问题呢?
附Oracle加密代码
create or replace function
encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
v_enc varchar2(4000);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
decrypted_string varchar2(4000);
begin
v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0));
raw_input := UTL_RAW.CAST_TO_RAW(v_text);
key_input := UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,key => key_input,encrypted_data =>decrypted_raw);
v_enc := rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return v_enc;
end;
附C#加密代码
byte[] rgbKey = Encoding.ASCII.GetBytes("aaaaaaaa".Substring(0, 8));
byte[] rgbIV = Encoding.ASCII.GetBytes("aaaaaaaa".Substring(0, 8));
byte[] inputByteArray = Encoding.UTF8.GetBytes("9804ff20-4429-42ed-87a7-d6794d607e4b");
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
dCSP.Mode = CipherMode.ECB;
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,
rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
StringBuilder builder = new StringBuilder();
foreach (byte num in mStream.ToArray())
{
builder.AppendFormat("{0:X2}", num);
}
mStream.Close();
var result= builder.ToString();
Oracle加密结果:
select encrypt_des('9804ff20-4429-42ed-87a7-d6794d607e4b','aaaaaaaa') from dual
29B63290034C40DA4108122EE2EA1CF7C07FC2A9FCE4D5A2B1F7613508D813F897FC0503C4518397
C#加密结果:
29B63290034C40DA38FEFE37F13F8B0BAFE2FC3A4A9200931AF43A2593CC7536A04BC9280C24914C
附Oracle加密代码
create or replace function
encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
v_enc varchar2(4000);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
decrypted_string varchar2(4000);
begin
v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0));
raw_input := UTL_RAW.CAST_TO_RAW(v_text);
key_input := UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,key => key_input,encrypted_data =>decrypted_raw);
v_enc := rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return v_enc;
end;
附C#加密代码
byte[] rgbKey = Encoding.ASCII.GetBytes("aaaaaaaa".Substring(0, 8));
byte[] rgbIV = Encoding.ASCII.GetBytes("aaaaaaaa".Substring(0, 8));
byte[] inputByteArray = Encoding.UTF8.GetBytes("9804ff20-4429-42ed-87a7-d6794d607e4b");
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
dCSP.Mode = CipherMode.ECB;
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,
rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
StringBuilder builder = new StringBuilder();
foreach (byte num in mStream.ToArray())
{
builder.AppendFormat("{0:X2}", num);
}
mStream.Close();
var result= builder.ToString();
Oracle加密结果:
select encrypt_des('9804ff20-4429-42ed-87a7-d6794d607e4b','aaaaaaaa') from dual
29B63290034C40DA4108122EE2EA1CF7C07FC2A9FCE4D5A2B1F7613508D813F897FC0503C4518397
C#加密结果:
29B63290034C40DA38FEFE37F13F8B0BAFE2FC3A4A9200931AF43A2593CC7536A04BC9280C24914C
...全文
相关推荐
C# DES加密解密
C# DES加密解密 http://blog.csdn.net/h1028962069/article/details/45180409
深入学习DES加密:C和C#调用示例解析
本文还有配套的精品资源,点击获取 简介:DES是一种历史悠久的对称加密算法,现已被AES取代但仍具学习价值。本文将详细介绍DES的加密过程,并提供C语言和C#语言下的调用示例,帮助理解如何在实际中应用DES算法进行数据的加密和解密。示例包括使用OpenSSL库和.NET框架的DESCryptoServiceProvider类,以及第三方DES库的调用方法。 1. DE...
sql server 中进行des加密
采用c#, 在sql server 中调用des 加密, 解密字符串. 可自定义key
DES加密算法,JS加密,C#解密
DES加密算法,JS加密,C#解密,也可以C#加密再用JS进行解密。用于前后端开发的加密算法,最大程度保护数据安全
C#中DES加密解密(兼容前端网页在线DES加密解密).zip
C#中DES加密解密(兼容前端网页在线DES加密解密)


