`
cloudtech
  • 浏览: 4619135 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

网站密码加密原理

 
阅读更多

网站密码加密原理(初级)

——致CSDN们

我本来不想写这么初级的文章,但是发生了CSDN这当子事情之后,我还得真得写点入门级的文章,给你们科普科普。

第一:什么是密码。

通俗地讲,密码就是进入一道门的钥匙。而之所以我们能找到我们要进入的门,靠的是门牌号。那么门牌号就是用户名。不知道我这么讲,你们能不能听明白。钥匙就是带锯齿的小铁片,插到一个铁做的洞洞里,如果刚好吻合,旋转一下,就卡擦一声,打开了。简单吧。打开了门,就发生了人类说不完的故事。

但是人类发明了钥匙和锁以来,从来没有破解不了的锁。这也算是锁的悲哀。

通常我们从商店里买来的锁带有3把钥匙,而锁厂是不能留下一个备份的。可是,现在的情形不是这样子,CSDN给我们每人一把钥匙,并且很好心地为每个用户保存了一个钥匙的备份。遗憾的是,CSDN把一长串的钥匙搞丢了,而且每把钥匙上还有我们的住址门牌号。CSDN其实是锁,钥匙不能和锁放在一起,这是最基本的常识。锁只知道自己的洞洞的形状,但不应该知道钥匙的形状。锁当感觉有东西插入自己的身体的时候,不管这东西是真的钥匙,还是火柴杆,如果锁觉得爽,就卡的开了。原理就这么简单。为了保证不管是真的钥匙,还是火柴棍,只要锁感觉爽,就一定要打开这个原则,锁是通过比较一串字节码来确定自己是否爽,这也很容易理解,真的钥匙会触到她的痒痒肉——李银河老师叫它G点——还不明白就问苍老湿。这串字节码就是钥匙上的锯齿。钥匙上的锯齿理论上是毫无规则的。那么,比较这个字节码是否一致就是锁感知钥匙的过程。锁总要有凭据来验证钥匙对不对。对于CSDN的实现来讲,它们简单地复制了一份钥匙拴在锁上,然后把用户插进来的那个钥匙和自己的进行比较。这种做法是不对的,错就错在:锁如果丢了,连带钥匙也丢了。你见过谁家把锁和钥匙放一起的吗?

第二:MD5。

数学家提供给我们许多很巧妙的算法,用来解决钥匙齿的生成问题,它们都遵循下面4个定律:

Rule-1)如果输入一堆东西,不管是什么,不管多少,总对应一个固定大小的输出(钥匙齿

Rule-2)如果输入不同,那么输出就一定不同(或者在极小的概率内相同)。

Rule-3)如果输入相同,那么输出就一定相同。

Rule-4)如果输入有一丁点不同,比如输入2头驴,其中一头仅仅比另一头多了一根毛,那么输出就截然不同。

例如:

输入一本书--->MD5--->输出一串固定长度的数字,如132234532495435343243245

输入一个太阳--->MD5--->输出一串固定长度的数字,如9384845739237439254357439

输入一个银河系--->MD5--->输出一串固定长度的数字,如675454365464564354656334

巧妙吧。但是从输出,无论如何我们也不能得到输入的是什么。

其中一个算法就是MD5。MD5处理输入的过程有人叫加密,有人叫签名。不管怎么称呼,都是不能根据输出来破解出输入的。理论上的确存在输入一只狗和一只航天飞机,得到的输出结果确是一样的情形,这种特例就和你不小心用黄瓜打开了一把锁的概率差不多。

考虑把输入当成密码的原文,而锁只保存MD5的输出结果,这样,用户在客户端页面输入密码之后,立即被MD5成固定长度的输出,然后把这个输出发送到CSDN那里,CSDN为每个用户保存了一个密码的MD5输出,通过比较这个输出,就知道是不是密码匹配了。如果CSDN保存的是MD5的输出。那么此次泄密的后果会小的多。因为我们无法从输出得到输入,也就无法知道密码。而存放明文密码是严厉禁止的。CSDN搞的跟“受害”者似的,其实“受害”的是用户。

第三:仅仅保存密码的MD5的输出还是不够的。

很多情况下,很多人设置的密码是相同的。那么相同的密码MD5处理得到的输出定长字符串就一定是一样的(Rule-3)。这给恶意的人猜中密码的机会。所以还需要加点佐料,让任何的输入都不一样,这个佐料我们称它为Salt——盐,不同的盐被加入到密码里搅拌,这样任何的输入就不同了。对于用户名——密码的情形,这个盐就是随机生成的字符串或数字而已。这样CSDN在用户的验证数据库中至少要保存密码加了盐之后的MD5值,当然也要保存盐值。用户登录的过程就变成:

1)***用户输入用户名和验证码,向CSDN发送登录请求

2)CSDN检查验证验,然后根据用户名到数据库里找到用户存储的盐返回给用户(验证码错误是不能返回盐的)

3)用户输入密码,然后在网页客户端用javascript把盐撒到用户的密码上,搅拌,然后MD5,得到输出

4)用户发送这个输出给CSDN——passport服务器

5)服务器把用户提交的MD5输出直接和数据库中存储的输出值做是否相等比较,一致就通过,不一致就拒绝。

***之所以强调用户首先输入验证码,是防止模拟自动机自动登录。遗憾的是目前CSDN的登录流程仍然存在问题,验证码居然是输入密码之后才出现的。

第四:光有盐还是不够的。

盐是用来保证,即使有人把用户数据库的资料泄密了,别人也无法轻易猜测出密码来。没有盐的加入就会导致MD5值大量一致的情况。

如果没有盐,当我恰好知道自己的密码的MD5恰好和她的密码的MD5值一样,而我的密码是iloveu,那么她的密码一定就是iloveu。有了盐,即使我知道她的盐,因为MD5出来的差异大不同(Rule-4),所以我也无法知道她的密码,即使我们的密码是一样的。盐是要确保每个用户都是不一样的。一般的随机算法或时间函数都能实现这一点。

盐如果泄密了,黑客仍然能够通过穷举法得到我们的密码。方法是黑客使用与我们相同的加盐和搅拌方法,得到MD5值。所以就引入了一次一密的登录加密方法,一次一密不是我们每次都要改登录密码,而是我们每次登录之后,盐都是要重新计算,更新——我称这个是酱油。这给黑客破解我们的密码增加了相当大的难度。我怀疑CSDN没有引入这个酱油,最多是加了碘盐。

其实,黑客不需要知道我们的密码,它们只需要截断消息,伪造session和消息,就能冒充我们。因此对于网上银行一类的网站,光有盐和酱油还是远远不够的。这就牵扯了ssl,证书,key,短信,token等等一堆的东西。网站不但要验证我们,我们也要验证网站:对于用户,你必须是我信赖的网站;对于网站,你必须是我的用户。

第五:希望CSDN有盐。

如果有空就把酱油也加进去吧。

分享到:
评论

相关推荐

    基于python的信息加密解密网站.zip

    此外,还提供了一些实用的工具,如密码生成器、文件加密器和解密器等。这些工具可以帮助用户在实际项目中应用所学知识,提高自己的技能水平。为了方便用户学习,这个平台还提供了一系列的示例代码。这些代码涵盖了...

    12种密码破解方法操作系统教程

    12种密码破解方法操作系统教程

    密码编码学与网络安全:原理与实践(第五版)(英文版)

    本书系统介绍了密码编码学与网络安全的基本原理和应用技术。全书主要包括五个部分:对称密码部分讲解传统加密技术、高级加密标准等;非对称密码部分讲解数论、公钥加密、RSA;第三部分讨论了加密哈希函数、消息认证...

    SSL工作原理详解

     当选择“SSL安全登录”后登录网站,用户名和密码会首先加密,然后通过SSL连接在 Internet 上传送,没有人能够读取或访问到您利用该连接传送的数据。使用SSL可以对通讯(包括E-mail)内容进行高强度的加密,从而可以...

    MD5 算法解密原理

    MD5技术算法加密解密原理,现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。

    KeePass开源密码管理器 强大 绿色 好用 安全

    KeePass Password Safe 就是专门为了解决人类记不得众多密码的问题所产生的,它包含了一个强大的密码产生引擎与加密储存机能,能够提供一个安全的密码储存空间。当你开始使用 KeePass Password Safe 时,要先决定一...

    HTTP协议,介绍http2,重要的头信息讲解,ssl的本地实现与原理

    HTTP协议原理+实践 Web开发工程师必学, 第1章 课程导学 第2章 HTTP协议基础及发展历史 第3章 HTTP各种特性总览 第4章 Nginx代理以及面向未来的HTTP

    IISCrypto修改ssl加密工具.zip

    IISCrypto修改ssl加密工具,可以在线检测网站的SSL证书是否安全,是否存在漏洞,是否达到ssL行业标准,符合苹果ATS规范,能否通过微信小程序安全要求。同时提供证书格式转换,CSR,证书链,SSL配置生成等。

    Access密码破解工具

    关于Access97的密码破解,在很多的网站和杂志上都有过介绍。在Access文件第0x42字节处的13个字节分别与0x86,0xfb,0xec,0x37,0x5d,0x44,0x9c,0xfa,0xc6,0x5e,0x28,0xe6,0x13异或后即可得到数据库的密码。但在Access ...

    SSL工作原理详解说明

     当选择“SSL安全登录”后登录网站,用户名和密码会首先加密,然后通过SSL连接在 Internet 上传送,没有人能够读取或访问到您利用该连接传送的数据。使用SSL可以对通讯(包括E-mail)内容进行高强度的加密,从而可以...

    passwordAssitant:密码助手,只需要记住一个密码就可以管理所有的密码

    passwordAssitant密码助手,只需要记住一个密码就可以管理所有的密码,再也不用为密码犯愁设计原理采用AES加密工具,用密码作为秘钥将一串明文加密,加密后的字符串编码得到12位长的加密字符串或者6位数字。...

    nodejs中各种加密算法的实现详解

    在大前端的趋势下,前端er也要懂点数据加密相关的知识才行,加密算法的实现和原理我们可以不用深究,毕竟加密是一门高深的学科,但是基本的加密方式和编码还是要掌握的,毕竟没吃过猪肉,猪跑还是见过的嘛。...

    网站架构技术

    数据库中的密码加密后存 -> 不可ni -> md5 加密 子主题 1 验证码 防止机器登录 对于攻击网站的XSS攻击,SQL注入,进行编码转换 对垃圾信息,敏感信息进行过滤 对交易转账等重要操作根据...

    电子商务网站设计原理重点.docx

    包括信用卡、借记卡等,客户可使用银行卡随时、随地完成在线支付操作,有关的个人信息、信用卡及密码信息,经过加密后直接传达到银行进行支付结算。 电子现金:是一种以数据形式流通、能被消费者和商家普遍接受、...

    Cryptography and Network Security _ Principles and Practice - 6th ed

    《密码编码学与网络安全:原理与实践(第6版)(英文版)》系统介绍了密码编码学与网络安全的基本原理和应用技术。全书主要包括五个部分,对称密码部分讲解传统加密技术、高级加密标准等;非对称密码部分讲解数论、公钥...

    PHP结合jQuery实现找回密码

    通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置...

    网上书城选购系统+ACCESS数据库

    8、用户密码加密:原理是通过判断用户输入的密码如果是数字型就加1;例如用户输入密码为123456则在数据库中显示123457;如果密码是字符型就在第二至三个字符之间插入字母a,例如用户输入密码为4f5kj3,则在数据库中...

    晓风网贷网站建设系统 免费下载

    在用户密码和数据通讯中尽量采用SSL加密等技术,把安全做到第一位。前台的交易平台晓风网贷网站建设系统目前是采用php开发技术,部分业务处理程序是采用C++编写,运行在linux的服务器上,极大的保证了交易平台处理的...

    支付宝监控系统V1.1免费绿色版

    支付宝监控软件功能介绍: 1、接口运行原理,接口是通过电脑端软件,抓取自己支付宝交易记录反馈给网站接口的形式,实现支付宝官方即时到帐接口的功能。 2、可实现自动发货,会员充值、会员升级等功能。 3、不需要...

    Securlio-crx插件

    Securlio根据URL的加密为每个网站生成唯一的密码,并提供您提供的主密码。 但是这里有个要注意的地方:Securlio永远不会在任何地方存储或保存您生成的密码,从而使它保持安全。 即使黑客闯入了网站的服务器,您的...

Global site tag (gtag.js) - Google Analytics