CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

========这个问题有多少人遇到过,想过?谁能给出解释,算是帮了大忙了! ========

楼主smoothwood(吾谁与归)2005-06-03 09:36:29 在 .NET技术 / ASP.NET 提问

下面这段程序,相信很多读过ASP.NET技术内幕这本书的朋友都很熟悉,是讲对称加密的,为了测试方便,我用WINDOW   FORM测试了这段程序,程序如下:          
          Const   DESKEY   As   String   =   "ABCDEFGH"  
          Const   DESIV   As   String   =   "HGFEDCBA"  
          Private   Sub   Button1_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)    
   
  Handles   Button1.Click  
                  Dim   arrDesKey   As   Byte()  
                  Dim   arrDesIV   As   Byte()  
                  Dim   arrinput   As   Byte()  
                  Dim   objFileStream   As   FileStream  
                  Dim   objEDS   As   DESCryptoServiceProvider  
                  Dim   objEncryptor   As   ICryptoTransform  
                  Dim   objCryptoStream   As   CryptoStream  
                  arrDesKey   =   Convert2Byte(DESKEY)  
                  arrDesIV   =   Convert2Byte(DESIV)  
                  arrinput   =   Convert2Byte(TextBox1.Text)   '注意这个地方①  
                  objEDS   =   New   DESCryptoServiceProvider  
                  objEncryptor   =   objEDS.CreateEncryptor(arrDesKey,   arrDesIV)  
                  objFileStream   =   New   FileStream("d:\test.txt",   FileMode.Create,   FileAccess.Write)  
                  objCryptoStream   =   New   CryptoStream(objFileStream,   objEncryptor,    
   
  CryptoStreamMode.Write)  
                  objCryptoStream.Write(arrinput,   0,   arrinput.Length)  
                  'Console.WriteLine(objCryptoStream.Position)  
                  Console.WriteLine(objFileStream.Length)   '注意这个地方②  
                  objCryptoStream.Close()  
          End   Sub  
          Private   Function   Convert2Byte(ByVal   strInput   As   String)   As   Byte()  
                  Dim   arrChar()   As   Char  
                  arrChar   =   strInput.ToCharArray  
                  Dim   arrByte(arrChar.Length   -   1)   As   Byte  
                  For   i   As   Integer   =   0   To   arrByte.Length   -   1  
                          arrByte(i)   =   Convert.ToByte(arrChar(i))  
                  Next  
                  Return   arrByte  
          End   Function  
  无论文本框中输入多长的字符串,程序执行都完全正常,在D盘下面也生成了test.txt这个文件,打开这个文件,里边也有加过密的内容(一些乱码),同时经过测试,test.txt中的内容也能够被很好的解密,一切看起来都很正常。  
  现在请注意②处,我的疑问在这里,当①处文本框中输入的内容(需要加密的内容)小于8个字母,那么②处输出的流的长度竟然是0,打开生成的test.txt文件,里边同样有被加密过后的内容;当文本框中输入的字母长度大于8小于16时,输出流的长度一直为8,当输入字母长度大于16小于32时,输出流长度一直为16,以此类推。。。现在我非常不解,为何会出现这种现象,特别是当输入字母长度小于8时,为何FileStream流的长度为0?既然流的长度为0,为何test.txt中还会出现加密后的内容? 问题点数:200、回复次数:33Top

1 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-03 09:45:49 得分 2

先做个标记。回来看看。。Top

2 楼LaoDai_Net(『老代』)回复于 2005-06-03 09:49:50 得分 2

 
  关注Top

3 楼brando_beat(Eの懒龙)回复于 2005-06-03 09:52:01 得分 2

markTop

4 楼TCat(蚊子)回复于 2005-06-03 09:53:35 得分 2

研究一下Top

5 楼qingyun1020(星期零)回复于 2005-06-03 09:55:09 得分 2

学习一下Top

6 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-06-03 09:55:38 得分 2

markTop

7 楼CCsdnCC(学研)回复于 2005-06-03 09:59:44 得分 2

难道是新的世界未解之迷?太牛了。研究一下。Top

8 楼gengxin_914(星星)回复于 2005-06-03 10:01:41 得分 2

不懂,来学习:)Top

9 楼simon8181()回复于 2005-06-03 10:03:46 得分 2

我觉得是不是因为是整数字节的问题?8,16,32。。。Top

10 楼smoothwood(吾谁与归)回复于 2005-06-03 10:07:03 得分 0

大家有什么想法多讨论呀~~最好给出你们系统的想法~大家一起研究一下嘛~~  
   
  这段程序大家可以试一试,看看结果Top

11 楼smoothwood(吾谁与归)回复于 2005-06-03 10:35:37 得分 0

帖子沉得真快!  
   
  大家有没有试过这段程序了呀?Top

12 楼rlqiang((不留)戒烟买房中。。。)回复于 2005-06-03 10:39:03 得分 2

回家再研究!Top

13 楼morality(业精于勤,行成于思!)回复于 2005-06-03 10:41:07 得分 2

呵呵,先顶一下!再回去测试看看!Top

14 楼morality(业精于勤,行成于思!)回复于 2005-06-03 10:41:35 得分 2

呵呵,先顶一下!再回去测试看看!Top

15 楼lovelxj(伊斯人,吾谁与归)回复于 2005-06-03 10:43:03 得分 10

流的单位以   8   字母为一单位(一字母等于多少字节大家算算)  
  我猜的Top

16 楼wangxinghai(我本轻狂)回复于 2005-06-03 10:43:52 得分 3

学习Top

17 楼smoothwood(吾谁与归)回复于 2005-06-03 10:44:26 得分 0

To:lovelxj(爱生活爱芳芳)  
  谢谢参与,呵呵~~希望有人能够给出一个系统的说明Top

18 楼xu770(我爱鱼儿)回复于 2005-06-03 10:48:15 得分 5

markTop

19 楼saucer(思归)回复于 2005-06-03 10:55:40 得分 120

I   am   not   a   Cryptographer,   but  
   
  1.   the   reason   you   see   0   for   the   first   case   is   because   there   are   some   bits   left   in   the   stream,   call   Flush()   will   not   work,   you   have   to   call  
   
  objCryptoStream.FlushFinalBlock()  
  Console.WriteLine(objFileStream.Length)    
   
  2.   the   reason   you   see   8,16,24,....   because   DES   algorithm   is   padded   by   the   block,   the   block   length   is   64   bits   -->   8   bytes,   see  
   
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritycryptographysymmetricalgorithmclasspaddingtopic.aspTop

20 楼CCsdnCC(学研)回复于 2005-06-03 11:03:05 得分 10

实验了一下,觉得FileStream.Length似乎并不是直接的Writer,只是让CryptoStream利用它的某些函数,然后Microsoft的某个家伙认为应该给FileStream留点什么,于是就来了个OldLength%8。Top

21 楼CCsdnCC(学研)回复于 2005-06-03 11:08:08 得分 0

上面我的回复请忽略。  
  试了一下Saucer的,是因为没有Flush完。Top

22 楼smoothwood(吾谁与归)回复于 2005-06-03 11:11:58 得分 0

感谢大家的参与~~每次看到思归的答案总能让我心旷神怡,现在了解个大概,我还要去仔细想想思归说的这个SymmetricAlgorithm.Padding  
  还是不太理解为何要"padded   by   the   block"?这样做有什么意义呀?  
  如果思归还在,劳驾~~Top

23 楼smoothwood(吾谁与归)回复于 2005-06-03 11:14:17 得分 0

TO:CCsdnCC(学研)  
  哈哈,为什么要忽略你的回复?看到大家都来参与,非常高兴,感谢大家~只有讨论,才能出真理嘛Top

24 楼renyu732(Sysinfo)回复于 2005-06-03 11:17:11 得分 5

好东西.  
   
  先收藏,完了再看...Top

25 楼saucer(思归)回复于 2005-06-03 11:21:14 得分 0

I   said   I   am   not   a   Cryptographer,   but   DES   is   a   block   cipher   algorithm,   read   about   the   padding   here  
   
  http://www.di-mgt.com.au/cryptopad.htmlTop

26 楼saucer(思归)回复于 2005-06-03 11:25:03 得分 0

CryptoStream.FlushFinalBlock()   其实是说,你的任务做完了,该Pad就Pad吧Top

27 楼mathsword(梦在流浪)回复于 2005-06-03 11:36:18 得分 5

又空看看Top

28 楼smoothwood(吾谁与归)回复于 2005-06-03 11:38:29 得分 0

好~研究一下,然后该Pad就Pad,呵呵Top

29 楼hanguoji84(北飘)回复于 2005-06-03 11:40:09 得分 3

估计是不是像楼上有为兄弟说的流的最低以一个8字节为一个单位如果在8就不会显示流的大小,但数据或内容还是存在于流中,这样数据也一样会被加密,只是在实际观察中观察不到!  
   
  保持关注Top

30 楼amethyst8989(紫水晶)回复于 2005-06-03 14:31:54 得分 4

upTop

31 楼zhangqiushui(水)回复于 2005-06-03 14:42:59 得分 4

认真研究下  
  顶Top

32 楼jimmyzhu25(勿以分少而不为,勿以分多而为之)回复于 2005-06-03 15:01:41 得分 4

MarkTop

33 楼renyu732(Sysinfo)回复于 2005-06-03 15:25:12 得分 3

upTop

相关问题

  • 急急急!小问题,帮大忙!
  • 上次帮我大忙,加贴送分
  • 请大家帮个大忙啊
  • 学习中遇到的一个基础问题,麻烦达人给解释下。。。
  • 遇到了几个问题,麻烦经验丰富的师兄帮忙解释一下吧!!!
  • 最近遇到一个非常奇怪的事情!谁知道?能帮我解释一下!!
  • 刚学习COM时遇到的几个问题,精通的COM的给解释一下好吗?谢谢1
  • 一个很奇怪的问题,你们有没有遇到过。请问怎么解释
  • 请教,我在编译时遇到这个问题,请帮忙解释一下.谢谢!
  • 在数据更新中从来没遇到过的奇怪现象,请高手帮我解释一下!

关键词

  • 字母
  • 加密
  • 内容
  • asp
  • 长度
  • arrdeskey
  • arrdesiv
  • objencryptor
  • objfilestream
  • 小于

得分解答快速导航

  • 帖主:smoothwood
  • hackate
  • LaoDai_Net
  • brando_beat
  • TCat
  • qingyun1020
  • ye_zi
  • CCsdnCC
  • gengxin_914
  • simon8181
  • rlqiang
  • morality
  • morality
  • lovelxj
  • wangxinghai
  • xu770
  • saucer
  • CCsdnCC
  • renyu732
  • mathsword
  • hanguoji84
  • amethyst8989
  • zhangqiushui
  • jimmyzhu25
  • renyu732

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo