作者sitos (麦子)
看板ask-why
标题Re: 帐号密码的大小写
时间Sat Jul 7 19:11:27 2007
※ 引述《curmathew ()》之铭言:
: 标题: 帐号密码的大小写
: 时间: Sat Jul 7 11:52:47 2007
:
: 为什麽许多需要帐号密码登入的地方
: 帐号打大写或小写都可以正常登入
: 密码却不行呢?
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 59.105.6.236
: 推 cpt:同一个英文字母的大/小写, 代表的字元码是不同的 07/07 12:00
: → cpt:帐号大小写设定成互通, 只是为了方便, 密码通常不会这样设计 07/07 12:01
: → cpt:因为密码的可用字元数越多, 被猜到的机率就越低 07/07 12:02
: 推 gamer:密码记录的不是字元,应该是ASCII码。帐号记录的应该是字元 07/07 14:30
: 推 sitos:字元(character?) ASCII? 一般的 ASCII 也是用 character 存 07/07 15:49
: 推 sitos:看不太懂 gamer 写的意思,现在已经很少用 7 bits 存东西罗 07/07 15:49
: 推 gamer:我的意思是像A帐号是存入A,但是密码是存入41。 07/07 17:17
: → gamer:然後帐号让'A'='a',可是密码是存41。这样大小写就会不同 07/07 17:19
: → gamer:我会这样想是因为系统随机产生密码的时候都是一连串乱七八糟 07/07 17:21
: → gamer:的大小写字母,所以我想会不会是产生出一串数字再转成字母。 07/07 17:22
基本上现在的字元(character)都是用 8 bits (1 byte) 来储存。
不管是帐号或者是密码如果要以明码储存,应该都是用一样的格式,
毕竟直接用 8 bits 储存最省空间,并别的格式储存没有好处。
你说的 0x41(hex) 也就是 65(dec) 存在记忆体中也是占 8 bits (0~255) ,
而 'A' (character) 存在记忆体也是一样占 8 bits ,其实也是存 0x41 ,
事实上 0x41 跟 'A' 在记忆体中是一模一样,唯一会产生不同的是,
在要显示出来的时候使用的 format (看是要用 integer 还是 character 显示)。
不管是帐号或是密码,字串以明码方式存在电脑里,大小写都是有区分的。
一般帐号作成大小写不分,还需要经过处理,通常是全部转成大写或全部转成小写,
再去作比对,这样不管输入进去是大小写意思都一样。而显示用的帐号另外纪录,
这样使用帐号时还是有原先输入的大小写分别,但比对帐号时就不会有。
而密码通常已经不会以明码储存在电脑里面,现在大多数的作法可能是透过 hash ,
例如 md5 之类的方式,把经过单向编码的密码存在电脑里面,
这样做主要是避免管理员窃取使用者的密码,当使用者输入密码时,
会把输入的密码也作一次 hash 再和正确密码的 hash 比对,如果一样,就当作是对。
但因为 hash 本身是多对一的 mapping ,因此可能输入密码不对但仍被当作是对,
只是因为一般的 hash 长度都很长,要刚刚好 map 到同一个的机率实在太小。
因为在电脑来看大小写本来就是不同,因此没作过特别处理时,大小写都会有区分。
简单讲,这一切都是取决於系统的设计者要怎麽做,
如果系统设计者不特别处理帐号,要让大小写有区别也是可以的。
如果系统设计者要特别处理密码,让大小写没有区别也是可以的。
只不过现在多数的作法都是帐号不分大小写(以免混淆),
但是密码区分大小写(增加安全性),也可以说是一种自然的趋势。
: 推 sitos:其实... 应该不会 07/07 18:49
--
我实实在在的告诉你们,一粒麦子不落在地里死了,
仍旧是一粒,若是死了,就结出许多子粒来。
约翰福音 12:24
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.178.70
1F:推 gamer:喔喔,感谢你的讲解。 07/07 21:44
2F:→ sitos:不客气... (如果讲错就请其它人帮忙指正吧) 07/07 21:50
3F:推 curmathew:感谢原po还有上面推文的解说XD 07/07 23:37
4F:推 scars:推 07/16 01:58