求助:SQL SERVER 加密解密问题!

yoroshi 2009-11-02 03:37:19
原因
SQL SERVER 中的加密函数和解密函数为 EncryptByPassPhrase() 和 DecryptByPassPhrase() 此为对称钥匙方法。
由于两个方法的返回值都是二进制(varbinary),所以要想放到可变长文字列(varchar)的表中就要转换一下
convert(varchar,EncryptByPassPhrase(xxxxx))

这样一来问题就发生了, 在varbinary和varchar的转换过程中会出现补常和去零的现象导致转换成varchar的数据再取出来解密的时候所得到的加密数据的varbinary和原来刚加密完的数据不一样了。

我试过 set ansi_padding on了
还是不管用

大家可以试试,n回里面总会出现无法解密的空值。

print convert(varchar(100),DecryptByPassPhrase('test',Convert(varchar(100),EncryptByPassPhrase('test','1234567890'))))


拜托哪位大侠来帮帮我,谢谢。
...全文
88 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoroshi 2009-11-02
  • 打赏
  • 举报
回复
多谢!!
但是看样子还是没有办法解决,,哎。。
问题是加密后的数据 varbinary 转换成 varchar 的时候看不到结果是正确还是错误
转换回来的时候也不会有任何报错,可是结果是就不一样了。
convert([varbinary],convert([varchar],encryptbypassphrase('test','1234567890')))
并不是每次都失败,10次里面大概小于3次是失败的。所以很奇怪。。
xiequan2 2009-11-02
  • 打赏
  • 举报
回复
学习

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧