byte[]与string相互转换

 

C#中byte[]与string相互转换及string与sql server中nvarchar的转换问题
    最近在写专业实践-数据库加密,找出以前写的MD5、DES程序,编成两个动态链接库MD5.dll、DES.dll,在这把我遇到的问题分享下~
(1)byte[]与string的相互转换
    首先在C#中string是Unicode编码,byte是8位无符号整数,而char是16位的,如何将string转换成byte[],将其作为参数 调用dll计算md5值或是DES加密?获得加密结果(byte[]类型)后,将其转换成string类型存入数据库(sql server 2000)中,同时又能从数据库中读出并转换成原来的byte[]呢?
    public byte[] ascstringtobytearray(string s)
     {
         byte[] b = (new ASCIIEncoding()).GetBytes(s);
         return b;
     }
     public string ascbytearraytostring(byte[] b)
     {
         string s = (new ASCIIEncoding()).GetString(b, 0, b.Length);
         return s;
     }
     public byte[] unistringtobytearray(string s)
     {
         byte[] b = (new UnicodeEncoding()).GetBytes(s);
         return b;
     }
     public string unibytearraytostring(byte[] b)
     {
         string s = (new UnicodeEncoding()).GetString(b, 0, b.Length);
         return s;
     }
     看了这个就知道了,byte[]转string有两种编码方式:ASCII和Unicode,其中在ASCII编码下,string的每个字符都转换其相 应的ASCII值,对应一个byte,而在Unicode编码下,string的每个字符要转换成两个byte,因此 如果在ASCII编码下byte[](byte大小为0-255)转换成string时可能会发生溢出。
     当你需要长度为8的string转换成byte[8]时,例如调用dll时函数参数为byte[8],这个时候就可以用ascstringtobytearray(),同时在解密后,要将byte[8]转换成8位的string, 这时可以确认byte[8]中的byte的值都在(0,127)内, 因此可以放心地用ascbytearraytostring()转换而不会发生溢出。
     但是当加密后的结果需要以string形式存入sql server时,加密结果的byte[16]就需要用unibytearraytostring()转换成长度为8的string,同时长度为8的 string用unistringtobytearray()可以转换成原来的byte[16], 因为如果用ASCII编码,可以肯定转换不回去。
 
(2)string与sql server中的nvarchar存取的乱码问题  
     问题又来了,当string存入sql server 2000是,虽然相应的字段设成 nvarchar类型, 可是打开数据库一看却有乱码和问号 ,读出数据来看,还是乱码和问号。原来 Unicode的string在存入数据库时需要用到关键字 N, 例如: string sql = String.Format("insert into [User] values('" + username + "',N'"+password + "')");
      
     呵呵,这下总算没问题了吧!下篇写写数据库加密的实现,先完善我的程序吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值