C# 尝试从Oracle加密函数读取DES3加密值

C# 尝试从Oracle加密函数读取DES3加密值,c#,oracle,C#,Oracle,我正在使用遗留系统,该系统已经具有oracle加密和解密功能,我正在使用C中的ODP.net与oracle DB通信 我必须使用oracle加密函数对值进行加密,该函数在oracle中使用DES3加密算法,并使用此加密值从oracle数据库读取数据。 我可以调用Oracle函数,它进行加密,但返回的加密文本带有一堆无法转换的矩形字符,因此当我使用此加密值从Oracle数据库读取数据时,它不起作用意味着什么也不返回 我的问题是,, 如何从Oracle encrypt函数中正确读取加密文本基本上如何

我正在使用遗留系统,该系统已经具有oracle加密和解密功能,我正在使用C中的ODP.net与oracle DB通信

我必须使用oracle加密函数对值进行加密,该函数在oracle中使用DES3加密算法,并使用此加密值从oracle数据库读取数据。 我可以调用Oracle函数,它进行加密,但返回的加密文本带有一堆无法转换的矩形字符,因此当我使用此加密值从Oracle数据库读取数据时,它不起作用意味着什么也不返回

我的问题是,, 如何从Oracle encrypt函数中正确读取加密文本基本上如何使用返回的加密文本从Oracle数据库读取数据?此oracle encrypt函数接受一个要加密的输入参数,并输出加密值。 任何想法在任何语言中都是有用的,C语言会很好

事先非常感谢你。上帝保佑你!
R

Oracle函数是否使用字符串数据类型?如果是这样,您需要在C应用程序中使用相同的编码,我不知道如何将字符串转换为字节。

我不太清楚

我想您在Oracle中有加密的数据。您希望从表中提取该数据,然后使用Oracle函数对其进行解密

当您加密数据时,您通常希望存储的数据是原始数据或BLOB,因为它不再是字符串,并且您不希望在其上发生任何类似字符串的字符集转换,例如从字符中删除重音符号。RAW/BLOB存储的另一种替代方法是将字节转换为十六进制表示,但这会浪费大量存储空间,因此我不推荐使用

因此,第一步是确定Oracle数据是否存储为RAW/BLOB、HEX或它们是否使用了VARCHAR2并始终使用相同的字符集以避免任何转换问题。如果是后者,则确定DBA应该能够从v$nls_参数中获取的数据库字符集,如果他不知道的话

基本上,您需要确保将与从数据库中提取的字节完全相同的字节推送到解密算法中。根据架构的不同,您可以简单地执行以下操作:

挑选 解密加密的\u列,:key\u变量 从表中,id=


Oracle函数使用varchar2作为输入和输出参数,就像您建议的那样,我使用C编码将加密字符串转换为字节,然后使用此代码转换回字符串-new UTF8Encoding.GetStringnew UTF8Encoding.GetBytesoraComd.Parameters[result].Value.ToString;但问题仍然是,无法使用此加密值从oracle表读取数据。不过谢谢你的回复。它不应该是UTF8!我猜这是一种8位编码,比如ISO-8859-1之类的。大量二进制字符在UTF-8中无效。您必须了解Oracle函数使用了什么。Gary,它不是存储为原始/blob或十六进制,而是存储为加密字符串,即varchar2。我找到了字符集及其US7ASCII。我的问题是,我必须使用oracle函数加密传入的密码,并从数据库读取数据,并将此加密密码作为参数发送。当oracle函数对加密文本进行加密并将其返回给c时,它的所有奇怪字符都是???