对"aaaaaaaa"进行加密得到的结果分别如下:
C#结果为: N0p5hwmlyn+dQUWEbvwkiHl960iEfyAd
oracle结果为: F5ACE5DCAE43F640
C#程序:
public static string Encrypt3DES(string a_strString, string a_strKey)
{
try
{
byte[] bt = (new System.Text.UnicodeEncoding()).GetBytes(a_strString);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(a_strKey, null);
byte[] key = pdb.GetBytes(24);
byte[] iv = pdb.GetBytes(8);
MemoryStream ms = new MemoryStream();
TripleDESCryptoServiceProvider tdesc = new TripleDESCryptoServiceProvider();
CryptoStream cs = new CryptoStream(ms, tdesc.CreateEncryptor(key, iv), CryptoStreamMode.Write);
cs.Write(bt, 0, bt.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
catch (Exception ex)
{
throw ex;
}
}
oracle 存储过程:
FUNCTION Encrypt_3key_Mode
(
Ivalue IN VARCHAR2,
Imode IN PLS_INTEGER
) RETURN RAW AS
Vencrypted VARCHAR2(4000);
Vencryptedraw RAW(2048);
Rawkey RAW(240) := '';
BEGIN
Rawkey := Gen_Raw_Key(Ikey); -- encrypt input string
Vencrypted := Dbms_Obfuscation_Toolkit.Des3encrypt(Formatstr(Ivalue),
Key_String => Rawkey,
Which => Imode);
-- convert to raw as out
Vencryptedraw := Utl_Raw.Cast_To_Raw(Vencrypted);
RETURN Vencryptedraw;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END Encrypt_3key_Mode;
为什么会得到这样的结果?是不是因为编码方式有问题?