原因
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'))))
拜托哪位大侠来帮帮我,谢谢。