create function CChar
(
    @Str nvarchar(4000),--加密的字符串
    @Flag bit=1,--1、加密 0、解密
    @Key nvarchar(50)--密文
)
returns nvarchar(4000)--這里可轉換成二進制as
begin
Declare @LenStr int,@i int,@Str2 nvarchar(4000),@Split nvarchar(2),@LenKey int
select @Str=@Str+'A',@LenStr=len(@Str),@i=1,@Str2='',@LenKey=Len(@Key+'A')-1
while @i<@LenStr
        select    @Split=substring(@Str,@i,1),
                @Split=nchar((unicode(@Split)+case @Flag    when 1 then unicode(substring(lower(@Key)+'A',@i%@LenKey+1,1))-1                                                
                                                    when 0 then 65535-unicode(substring(lower(@Key)+'A',@i%@LenKey+1,1))
                                                    else 0 end)%65535+cast(@Flag as int)),
                @Str2=@Str2+@Split,@i=@i+1
return @Str2end
上面这段sql server函数,我用如下代码转换成了c#函数
public static string CChar(string strED, int flag, string key)
        {
          
              int intLenStr;int i;string str2;string strSplit;int intLenKey;
              strED=strED+"A";intLenStr=strED.Length;str2="";intLenKey=(key+"A").Length-1;i=1;     
              while(i<intLenStr)
              {
                strSplit=strED.Substring(i-1,1);
                if(flag==1)
                {
                    strSplit= Convert.ToString((char)(((int)char.Parse(strSplit)+(int)char.Parse((key.ToLower()+"A").Substring(i%intLenKey,1))-1)%65535+flag));
                    
                }
                else if(flag==0)
                {
                    strSplit = Convert.ToString((char)(((int)char.Parse(strSplit) + 65535 - (int)char.Parse((key.ToLower() + "A").Substring(i % intLenKey, 1))) % 65535 + flag));
                }          
                str2=str2+strSplit;i++;
              }
                return str2;
        }
我在c#中用c#函数加密后存入数据库,然后用sql 解密后显示出来,但显示有问题,
“中国人。[]()【】()——_《》<>:,,。,.☆+-*/+-×÷%‰”,中国人。【】《》解密出来了,其他没有解出来,“555”加密后在解密成“ᅴ5ᅯᅴ5”,如果全用sql server函数加解密或用全用c#函数加解密都正常,是不是我加密的c#函数写的有问题,请高手帮忙看一下,有劳了