C#代码加密字符串,与SQL加密结果不一致

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#代码加密字符串,与SQL加密结果不一致相关的知识,希望对你有一定的参考价值。

SQL2008数据库 VS2010 ;select hashbytes('SHA1', '123456') 返回值跟用C#代码计算的sha1值不同
这个什么情况?两边都改用MD5的话,结果还是不同。。。。。

参考技术A 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的MD5和SHA1值,使用方法如下:

--获取123456的MD5加密串
select hashbytes('MD5', '123456') ;
--获取123456的SHA1加密串
select hashbytes('SHA1', '123456') ;
有了这个函数可以在SQL Server中为字符串进行加密,但是HashBytes() 函数的返回结果是VarBinary类型(以 0x 开头 16 进制形式的二进制数据)。通常情况下,我们需要的都是字符串型的数据,很多人首先想到的可能就是用CAST或Convert函数将VarBinary转换为VarChar,但这样转换后的结果会是乱码,正确转换VarBinary可变长度二进制型数据到16进制字符串应该使用系统内置函数sys.fn_VarBinToHexStr()或sys.fn_SqlVarBaseToStr(只在sqlserver2005以后的有),如下所示:

select sys.fn_VarBinToHexStr(hashbytes('MD5', '123456'))
然后就可以截取需要的部分:

set right(sys.fn_VarBinToHexStr(hashbytes('MD5','123456')),32)
为MD5加密串。
参考技术B 为什么必须要相同呢?只要一边有此功能足矣。

php的3des加密结果与java不一致

php的3des加密结果与java不一致 密钥我知道 是32位 16进制的字符串 mcrypt拓展也都已经打开 就是不知道是哪的问题 怎么解决 求大仙们帮助

这个曾经研究过一点,如果你有php段完整的加密源代码,那么还是有可能做到结果一致的,否则很难,因为虽然都叫3des,但里面却有多种算法,比如php加密时是否使用了向量等等追问

我们用的模式(ecb)都是一样的 而且什么叫完整的加密代码 从哪地方有完整的代码

追答

一般加密过程会由几个主要方法组成,就是要有这些源代码,比如明文数据作为参数传入加密方法后,先怎么样,后怎么样,什么时候调用Hex等等

参考技术A 这个曾经研究过一点,如果你有php段完整的加密源代码,那么还是有可能做到结果一致的,否则很难,因为虽然都叫3des,但里面却有多种算法,比如php加密时是否使用了向量等等 参考技术B 不同软件的加密算法是不同的,各个软件的默认算法都不一样,选项再类似也是不一样的,这是正常的,一般加密过程会由几个主要方法组成,就是要有这些源代码,比如明文数据作为参数传入加密方法后,先怎么样,后怎么样,什么时候调用Hex等等。 参考技术C 不同软件的加密算法是不同的,各个软件的默认算法都不一样,选项再类似也是不一样的,这是正常的 参考技术D 密钥一样但des的S盒是一样的吗?

以上是关于C#代码加密字符串,与SQL加密结果不一致的主要内容,如果未能解决你的问题,请参考以下文章

MD5加密C#和js代码加密结果不同

中文字符串C++MD5加密结果与PHP的加密结果不一致,怎么办

PHP中的md5与Java中的md5加密结果不一致问题

API接口签名验证_MD5加密出现不同结果的解决方法

DES加密解密结果为何不一致?

DES加密算法(密文只有字符串和数字)java和android加密的结果一致(可放在url中)