oracle md5 重复,33-SQLServer和Oracle使用MD5加密字符串不一致的问题
一、总结
1、varchar: 可变长度的非Unicode字符数据.n的值必须在1到8000之间.n是2的话,表示2个字节,所以可以存储2个英文,只能存储1个中文。
nvarchar: 可变长度的Unicode字符数据.n的值必须在1到4000之间.意思就是不管是英文还是中文都按照2个字节来处理。
2、Unicode和非Unicode的区别
Unicode字符集就是为了解决中文而产生的,英文存储一个英文只需要1个字节,但是中文的存储一个汉字需要2个字节。
3、nvarchar类型的字段使用MD5加密后的结果是md5(unicode)类型,
varchar类型的字段使用MD5加密后的结果是md5类型,
所以2中字段类型相同的字符串加密出来的结果是不一样的,这个需要注意一下。
二、操作步骤
1、使用Oracle加密‘jack’字符串
命令:select utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING =>‘jack‘)) from dual;
Oracle对 ‘jack’ 加密后的字符串为:4FF9FC6E4E5D5F590C4F2134A8CC96D1
2、使用SQLServer加密‘jack’字符串
命令:select name ,substring(sys.fn_sqlvarbasetostr(HashBytes(‘MD5‘,name)),3,32) from customer..person where id=9
SQLServer对 ‘jack’ 加密后的字符串为:fdd311ede98f57ad459c86c08c63f8f4
注:从上面加密后的结果看,SQLServer和Oracle使用MD5对 ‘jack’ 加密后的结果不一致
3、使用网上对MD5加密后的字符串解密看一下
这里提供一个在线解密的网址:https://www.somd5.com/(这个大家可以在网上找,挺多的)
Oracle解密:
SQLServer解密:
注:发现解密后的结果都是 ‘jack’,仔细看可以发现,Oracle的加密类型是md5,SQLServer的加密类型是md5(unicode),突然想到了SQLServer里表的字段类型,赶紧查看
4、查看SQLServer表的字段类型
注:发现name的字段类型是nvarchar的,也就是Unicode字符类型的(上面有做详细解释),所以加密后是md5(unicode)的,问题似乎找到了,赶紧创建一个varchar的测试一下
5、SQLServer里测试字段类型是varchar的加密结果
(1)创建一张per表,name的字段类型是varchar
(2)对这张表name是‘jack’的数据加密
这次加密后是:4ff9fc6e4e5d5f590c4f2134a8cc96d1,发现和Oracle一致了。
6、SQLServer直接对nvarchar字段类型的表装换类型加密看一下结果
命令:select substring(sys.fn_sqlvarbasetostr(HashBytes(‘MD5‘,convert(varchar(20),name))),3,32) from customer..person where id=9
注:发现也是一致的,所以可以直接对nvarchar类型的字段转换类型来加密,解决加密不一致的问题。
最终问题解决,就是字段类型的问题!!!
原文:https://www.cnblogs.com/jialanyu/p/13091924.html
oracle md5 重复,33-SQLServer和Oracle使用MD5加密字符串不一致的问题相关推荐
- oracle删除重复字段数据库,用Oracle的分析函数删除重复的数据,
用Oracle的分析函数删除重复的数据, 用Oracle的分析函数删除重复的数据 没有主键(Primary Key)约束保护的表格可能会让重复的数据行被插入进来.查找这种重复数据的传统方式是通过GRO ...
- oracle判断值是否为0的高数,SQLServer和Oracle的常用函数对比
数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) ...
- [转]SQLServer和Oracle,存储过程区别,常用函数对比
本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...
- sqlserver oracle对比,sqlserver和oracle常用函数对比
sqlserver和oracle常用函数对比 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S: ...
- 一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE
这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...
- mysql数据迁移到sqlserver_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...
这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...
- oledb vc访问mdb数据库_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...
这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...
- oracle stdevp函数,ORACLE 系统函数与SQLSERVER系统函数的区别是什么
ORACLE 系统函数与SQLSERVER系统函数的区别是什么 发布时间:2021-03-17 14:40:36 来源:亿速云 阅读:57 作者:Leah 栏目:数据库 这篇文章给大家介绍ORACLE ...
- C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)
转载出处:https://www.cnblogs.com/7tiny/p/7602808.html(仅供个人学习记录) [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是 ...
最新文章
- css垂直居中如何实现
- 24款非常实用的CSS3工具终极收藏
- 猛龙出击•东莞赛区新闻发布会隆重举行,粤港澳大湾区将迎来首场搏击盛宴...
- event.srcElement 说明 方法 技巧
- win10+64位 安装Theano并实现GPU加速
- C# EF6 更新对象
- Linux之——命令大全
- 模拟美式橄榄球比赛数据(R)
- pandas中Category的应用
- 离散数学知识点总结(3):等值演算,16个命题定律 / 基础等价式,重言式的替换规则,证明有效性和可满足性的方法
- Python判断html的元素,python判断网页元素是否存在的方法
- HTML CSS JS 网页设计作业「我的家乡」汉口5页 带留言表单
- 用Python写的水仙花数程序,感觉这个也比较好懂
- 设置表格列宽 —— 在富文本编辑器中的实现
- 以本职工作为挡箭牌推托,久而久之,你就只能原地踏步。
- Linux ffs()函数
- this.$nextTick
- 跟刀客一起追寻昨日的足迹
- 屡陷丑闻的 Facebook,试图靠 AI Bot 管住员工的嘴,可能吗?
- 电子设计竞赛前的点点滴滴