C# 和 PL/SQL 中的 Base64?

Posted

技术标签:

【中文标题】C# 和 PL/SQL 中的 Base64?【英文标题】:Base64 in C# and PL/SQL? 【发布时间】:2011-01-25 15:54:03 【问题描述】:

在 PL/SQL 中,如何将字符串(带有换行符和标签的长 html 字符串等)转换为易于在 C# 中解密的 Base64?

在 C# 中有:

Convert.ToBase64String()
Convert.ToBase64CharArray()
BitConverter.ToString()

哪一个兼容PL/SQL

utl_encode.base64_encode();

?

我欢迎任何其他建议:-)

【问题讨论】:

看起来您回答了自己的问题。为什么不让它成为下面的“答案”? 我不确定你的意思是什么? @AdamHawkes 的意思是utl_encode.base64_encode(); 在 PL/SQL 中进行 Base64 编码。 @数据库 等等,好的,我明白了!现在我明白了,这不是关于存储过程,而是关于 C# 方法。 【参考方案1】:

您可能想要使用此方法:

Convert.ToBase64String()

它返回一个基于无符号 8 位整数(字节)数组的 Base64 编码字符串。

作为替代,您可以使用Convert.ToBase64CharArray(),但输出是一个字符数组,这有点奇怪,但在某些情况下可能有用。

BitConverter.ToString() 方法返回一个字符串,但字节以十六进制表示,而不是 Base64 编码。

【讨论】:

谢谢,但哪一个给我的结果与 utl_encode.base64_encode();在 PL/SQL 中?我问是因为现在我无法访问我的 Oracle 数据库,干杯 很难说哪个最接近。 UTL_ENCODE.BASE64_ENCODE 有一个 RAW 参数并返回一个 RAW。然后必须将该 RAW 转换为字符串 (VARCHAR2) 以匹配 Convert.ToBase64String 的输出。【参考方案2】:

我做到了:-)

PL/SQL

s1 varchar2(32767);
s2 varchar2(32767);

s2:= utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(s1)));
s2:= utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw(s1)));

与 C# 兼容

public static string ToBase64(string str)

         return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));


//++++++++++++++++++++++++++++++++++++++++++++++

public static string FromBase64(string str)

         return Encoding.UTF8.GetString(Convert.FromBase64String(str));

希望你觉得它有用:-)

【讨论】:

以上是关于C# 和 PL/SQL 中的 Base64?的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中复制 Java 的 Base64 解码

C# 和 PL/SQL 中的加密和解密兼容性

如何在c#中使用oledb执行pl sql块

PL/SQL NVL 和 OracleParameter 在 C# 中不起作用

C# pl/sql 包函数

win7 X64系统上 PL/SQL不能识别Oracle实例