首页 新闻 会员 周边 捐助

关于DES加密的问题

0
悬赏园豆:10 [待解决问题]

在oracle和C#中都用到了DES加密,但同样的字符串和密钥,加密出来的结果不一样,怎么都找不到问题。后来到网上找了一个在线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

锦瑟无端五十弦的主页 锦瑟无端五十弦 | 初学一级 | 园豆:192
提问于:2017-10-31 22:43
< >
分享
所有回答(2)
0

CipherMode.ECB 这个参数是有差别的,oracle的算法用的是哪种查下文档

2012 | 园豆:21645 (高人七级) | 2017-11-01 08:17
0

主要看下Mode和Padding,要对上才行。

Timetombs | 园豆:3959 (老鸟四级) | 2017-11-01 14:55

我试了所有的mode和padding,都不行……

最接近的就是Mode=ECB, Padding=None,这样前8位是相同的。

支持(0) 反对(0) 锦瑟无端五十弦 | 园豆:192 (初学一级) | 2017-11-03 00:36

@锦瑟无端五十弦: dbms_obfuscation_toolkit.DESEncrypt 看看这个内部到底是什么设置,还有是否iv向量是每次都会随机的,如果是,那么每次调用的结果都肯定是会不一样的。但是都可以解密。

支持(0) 反对(0) Timetombs | 园豆:3959 (老鸟四级) | 2017-11-03 12:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册