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

时间:2010-12-23 20:35:24

标签: c# oracle

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

我必须使用oracle加密函数加密值,该函数在Oracle中使用DES3加密算法并使用此加密值从Oracle数据库中读取数据。 我可以调用Oracle函数并加密,但是它返回的加密文本带有一堆矩形,这些矩形是无法隐藏的字符,所以当我使用这个加密值从Oracle数据库中读取数据时,它的工作意义不再有效。

我的问题是, 如何从Oracle加密函数中正确读取加密文本基本上如何使用此返回的加密文本从oracle数据库中读取数据?这个oracle加密函数将一个输入参数加密并吐出加密值。 任何想法对任何语言都有帮助,C#会很棒。

提前非常感谢你。上帝祝福你! [R

2 个答案:

答案 0 :(得分:1)

我不太清楚。

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

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

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

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

  

选择   解密(encrypted_column,:key_variable)   FROM表WHERE id = ....;

答案 1 :(得分:0)

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