Oracle、SQL Server下MD5+Base64密码加密实现

本文讲述了在Oracle和SQL Server中实现MD5+Base64密码加密时遇到的字符集转换问题。由于C#中的Unicode编码与SQL Server和Oracle的NVarchar2编码差异,导致MD5值不一致。解决方案是正确处理UTF16LE和UTF16BE编码。文中提供了Oracle和SQL Server的相关函数实现代码。
摘要由CSDN通过智能技术生成

写在前面:

MD5和Base64的函数实现并不是本文的重点,重点是在实现过程中遇到的字符集转换的麻烦

 

最近由于工作需要,要将BIEE与公司现有的ERP系统做集成,使用外部表的方式。

现有系统基于.Net平台,数据库为SQL Server 2008 R2,用户密码采用先算MD5在转Base64的方式存于数据库中。

代码逻辑如下

byte[] byteString = null;
MD5 md5 = MD5.Create();
byteString = md5.ComputeHash(Encoding.Unicode.GetBytes(Str));
md5.Clear();
string NewStr = Convert.ToBase64String(byteString);


Encoding.Unicode.GetBytes(Str)这句为最关键的部分,其作用是把Str转换成了Unicode字节数组,正是这里给整个工作带来了困难!因为本人不懂C#,所以不知道C#里的Unicode是使用的UTF16LE(小头),而非常见的UTF16BE(大头)。SQL Server 里的Nvachr应该也是采用的是UTF16LE,而Oracle里的NVarchar2则是采用的UTF16BE,正是因为这点导致MD5出来的值串不一致!

 

对于qaz123三者的输出值分别为:

 

Oracle:

SQL> select utl_raw.cast_to_varchar2(utl_encode.base64_encode(GET_
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值