原因
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'))))
拜托哪位大侠来帮帮我,谢谢。
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'))))
拜托哪位大侠来帮帮我,谢谢。
解决方案 »
- 『求助』涉及到2张表查询,但不是连接查询
- 如何拒绝一个数据库用户只能通过.net程序访问,而不能通过企业管理器和查询分析器连接
- 怎样将这四个表关联起来
- 求教SQL Server 2005 8.0和9.0的问题!
- sql日志设置与sql性能的小问题
- TO zjcxc(邹建) 再问一下 sql server200 里跨三台机器建立视图问题!
- 高手们,帮我看看。大力 help me!熟ADO的请看!存储过程里有了insert语句后在应用程序里不能返回记录集(sql里可以)
- 怎样删除有被外键引用的 TABLE ?
- 邹建大哥救救我吧~!!动态列转行的问题!急救~!!!高手请快进!在线等
- 求一条语句 需要用到循环
- 急问,虚拟机无法连接到SQLServer2000,错误代码10061,打了sp4也不行
- sql 批量录入
但是看样子还是没有办法解决,,哎。。
问题是加密后的数据 varbinary 转换成 varchar 的时候看不到结果是正确还是错误
转换回来的时候也不会有任何报错,可是结果是就不一样了。
convert([varbinary],convert([varchar],encryptbypassphrase('test','1234567890')))
并不是每次都失败,10次里面大概小于3次是失败的。所以很奇怪。。