您的位置:程序门 -> .net技术 -> c#



des加密解密的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


des加密解密的问题
发表于:2007-02-07 11:33:12 楼主
1)我下载了一个des加密解密的可执行文件,输入要求是16个字符,如 "1a1a111111111111 ",密钥也是16个字符,而且字符是在0-9、a-f的范围之内。并且每两个字符被认为是一个数字。请问:如果ab代表的数字是什么?如何换算?
2)我在网上看到一段c#的代码,密钥都要求是8个字符的,但加密出来的结果是一些比较奇怪的字符。如123用12345678加密后的结果是a1+4pwkl=acqy这样的形式的,怎么样才能让它输出为字符是在0-9、a-f的范围之内?并且密钥也改成输入为16个字符,程序把这16个字符转换成8位?

附:c#代码
//加密
    public   static   string   encode(string   data,   string   key_64,   string   iv_64)
      {
              byte[]   bykey   =   system.text.asciiencoding.ascii.getbytes(key_64);
              byte[]   byiv   =   system.text.asciiencoding.ascii.getbytes(iv_64);
              descryptoserviceprovider   cryptoprovider   =   new   descryptoserviceprovider();
                        int   i   =   cryptoprovider.keysize;
                        memorystream   ms   =   new   memorystream();
                        cryptostream   cst   =   new   cryptostream(ms,cryptoprovider.createencryptor(bykey,byiv),cryptostreammode.write);
                        streamwriter   sw   =   new   streamwriter(cst);
                        sw.write(data);
                        sw.flush();
                        cst.flushfinalblock();
                        sw.flush();
                        return   convert.tobase64string(ms.getbuffer(),   0,   (int)ms.length);
                }
//解密
public   static   string   decode(string   data)
    {  
            byte[]   bykey   =   system.text.asciiencoding.ascii.getbytes(key_64);
            byte[]   byiv   =   system.text.asciiencoding.ascii.getbytes(iv_64);
            byte[]   byenc;
            try
            {
                  byenc   =   convert.frombase64string(data);
            }
            catch
            {
                  return   null;
              }
              descryptoserviceprovider   cryptoprovider   =   new   descryptoserviceprovider();
              memorystream   ms   =   new   memorystream(byenc);
              cryptostream   cst   =   new   cryptostream(ms,cryptoprovider.createdecryptor(bykey,byiv),cryptostreammode.read);
              streamreader   sr   =   new   streamreader(cst);
              return   sr.readtoend();  
                }
发表于:2007-02-08 13:52:441楼 得分:0
顶。
发表于:2007-02-08 14:00:182楼 得分:0
des加密要求密钥是64bit
3des是3*64=192bit

return   convert.tobase64string(ms.getbuffer(),   0,   (int)ms.length);
不转成base64的string就不是乱码了


快速检索

最新资讯
热门点击