登录密码加密传输
㈠ 数据库登陆时候,数据库客户端输入的用户名和密码,在网络上传输是否加密
是的,password的加密手段是摘要加密算法,比如MD5。id不需要加密。
以oracle为例,在默认的情况下,除了password之外,所有的数据都是明文传送方式。但是DBA可以在服务器端强制设置客户端使用安全的连接方式,比如Kerberos,这时传输的所有数据包括password的摘要加密结果都要经过kerberos认证加密之后再传送。其他的加密方式还有bs认证。
对于mysql,管理员可以设置ssl安全连接和ssh认证。
㈡ js点击登录按钮获取到账号密码文本框内容并加密传输
文本框和密码框都是input元素,只是type属性值不一样,因此只要将type属性由text修改为password即可实现文本框变密码框。示例如下:
1、HTML结构
<inputtype="text"id="test"value="请输入密码"onclick="fun(this)">
2、javascript代码
functionfun(obj){obj.value="";obj.type="password";}
3、效果演示
㈢ https如何进行加密传输
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.浏览器获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
㈣ 一般网页中的用户名和登录密码在传输过程中是通过什么加密的
对于打开了某个论坛,输入了用户名和密码,其实如果网站设计者重视安全问题的话一般会对输入的用户名和密码进行加密,加密后的用户名和密码用一连串的字符表示,所以即使别人窃取了你的用户名和密码和密码,他们如果不知道怎么解密,他们只能得到一连串的字符,所以这也是一道防线。
接下来就是网络安全方面的问题:
数据加密(Data Encryption)技术
所谓加密(Encryption)是指将一个信息(或称明文--plaintext) 经过加密钥匙(Encrypt ionkey)及加密函数转换,变成无意义的密文( ciphertext),而接收方则将此密文经过解密函数、解密钥匙(Decryti on key)还原成明文。加密技术是网络安全技术的基石。
数据加密技术要求只有在指定的用户或网络下,才能解除密码而获得原来的数据,这就需要给数据发送方和接受方以一些特殊的信息用于加解密,这就是所谓的密钥。其密钥的值是从大量的随机数中选取的。按加密算法分为专用密钥和公开密钥两种。
专用密钥,又称为对称密钥或单密钥,加密时使用同一个密钥,即同一个算法。如DES和MIT的Kerberos算法。单密钥是最简单方式,通信双方必须交换彼此密钥,当需给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密。这种方式在与多方通信时因为需要保存很多密钥而变得很复杂,而且密钥本身的安全就是一个问题。
DES是一种数据分组的加密算法,它将数据分成长度为6 4位的数据块,其中8位用作奇偶校验,剩余的56位作为密码的长度。第一步将原文进行置换,得到6 4位的杂乱无章的数据组;第二步将其分成均等两段 ;第三步用加密函数进行变换,并在给定的密钥参数条件下,进行多次迭代而得到加密密文。
公开密钥,又称非对称密钥,加密时使用不同的密钥,即不同的算法,有一把公用的加密密钥,有多把解密密钥,如RSA算法。
在计算机网络中,加密可分为"通信加密"(即传输过程中的数据加密)和"文件加密"(即存储数据加密)。通信加密又有节点加密、链路加密和端--端加密3种。
①节点加密,从时间坐标来讲,它在信息被传入实际通信连接点 (Physical communication link)之前进行;从OSI 7层参考模型的坐标 (逻辑空间)来讲,它在第一层、第二层之间进行; 从实施对象来讲,是对相邻两节点之间传输的数据进行加密,不过它仅对报文加密,而不对报头加密,以便于传输路由的选择。
②链路加密(Link Encryption),它在数据链路层进行,是对相邻节点之间的链路上所传输的数据进行加密,不仅对数据加密还对报头加密。
③端--端加密(End-to-End Encryption),它在第六层或第七层进行 ,是为用户之间传送数据而提供的连续的保护。在始发节点上实施加密,在中介节点以密文形式传输,最后到达目的节点时才进行解密,这对防止拷贝网络软件和软件泄漏也很有效。
在OSI参考模型中,除会话层不能实施加密外,其他各层都可以实施一定的加密措施。但通常是在最高层上加密,即应用层上的每个应用都被密码编码进行修改,因此能对每个应用起到保密的作用,从而保护在应用层上的投资。假如在下面某一层上实施加密,如TCP层上,就只能对这层起到保护作用。
值得注意的是,能否切实有效地发挥加密机制的作用,关键的问题在于密钥的管理,包括密钥的生存、分发、安装、保管、使用以及作废全过程。
(1)数字签名
公开密钥的加密机制虽提供了良好的保密性,但难以鉴别发送者, 即任何得到公开密钥的人都可以生成和发送报文。数字签名机制提供了一种鉴别方法,以解决伪造、抵赖、冒充和篡改等问题。
数字签名一般采用不对称加密技术(如RSA),通过对整个明文进行某种变换,得到一个值,作为核实签名。接收者使用发送者的公开密钥对签名进行解密运算,如其结果为明文,则签名有效,证明对方的身份是真实的。当然,签名也可以采用多种方式,例如,将签名附在明文之后。数字签名普遍用于银行、电子贸易等。
数字签名不同于手写签字:数字签名随文本的变化而变化,手写签字反映某个人个性特征, 是不变的;数字签名与文本信息是不可分割的,而手写签字是附加在文本之后的,与文本信息是分离的。
(2)Kerberos系统
Kerberos系统是美国麻省理工学院为Athena工程而设计的,为分布式计算环境提供一种对用户双方进行验证的认证方法。
它的安全机制在于首先对发出请求的用户进行身份验证,确认其是否是合法的用户;如是合法的用户,再审核该用户是否有权对他所请求的服务或主机进行访问。从加密算法上来讲,其验证是建立在对称加密的基础上的。
Kerberos系统在分布式计算环境中得到了广泛的应用(如在Notes 中),这是因为它具有如下的特点:
①安全性高,Kerberos系统对用户的口令进行加密后作为用户的私钥,从而避免了用户的口令在网络上显示传输,使得窃听者难以在网络上取得相应的口令信息;
②透明性高,用户在使用过程中,仅在登录时要求输入口令,与平常的操作完全一样,Ker beros的存在对于合法用户来说是透明的;
③可扩展性好,Kerberos为每一个服务提供认证,确保应用的安全。
Kerberos系统和看电影的过程有些相似,不同的是只有事先在Ker beros系统中登录的客户才可以申请服务,并且Kerberos要求申请到入场券的客户就是到TGS(入场券分配服务器)去要求得到最终服务的客户。
Kerberos的认证协议过程如图二所示。
Kerberos有其优点,同时也有其缺点,主要如下:
①、Kerberos服务器与用户共享的秘密是用户的口令字,服务器在回应时不验证用户的真实性,假设只有合法用户拥有口令字。如攻击者记录申请回答报文,就易形成代码本攻击。
②、Kerberos服务器与用户共享的秘密是用户的口令字,服务器在回应时不验证用户的真实性,假设只有合法用户拥有口令字。如攻击者记录申请回答报文,就易形成代码本攻击。
③、AS和TGS是集中式管理,容易形成瓶颈,系统的性能和安全也严重依赖于AS和TGS的性能和安全。在AS和TGS前应该有访问控制,以增强AS和TGS的安全。
④、随用户数增加,密钥管理较复杂。Kerberos拥有每个用户的口令字的散列值,AS与TGS 负责户间通信密钥的分配。当N个用户想同时通信时,仍需要N*(N-1)/2个密钥
( 3 )、PGP算法
PGP(Pretty Good Privacy)是作者hil Zimmermann提出的方案, 从80年代中期开始编写的。公开密钥和分组密钥在同一个系统中,公开密钥采用RSA加密算法,实施对密钥的管理;分组密钥采用了IDEA算法,实施对信息的加密。
PGP应用程序的第一个特点是它的速度快,效率高;另一个显着特点就是它的可移植性出色,它可以在多种操作平台上运行。PGP主要具有加密文件、发送和接收加密的E-mail、数字签名等。
(4)、PEM算法
保密增强邮件(Private Enhanced Mail,PEM),是美国RSA实验室基于RSA和DES算法而开发的产品,其目的是为了增强个人的隐私功能, 目前在Internet网上得到了广泛的应用,专为E-mail用户提供如下两类安全服务:
对所有报文都提供诸如:验证、完整性、防抵 赖等安全服务功能; 提供可选的安全服务功能,如保密性等。
PEM对报文的处理经过如下过程:
第一步,作规范化处理:为了使PEM与MTA(报文传输代理)兼容,按S MTP协议对报文进行规范化处理;
第二步,MIC(Message Integrity Code)计算;
第三步,把处理过的报文转化为适于SMTP系统传输的格式。
身份验证技术
身份识别(Identification)是指定用户向系统出示自己的身份证明过程。身份认证(Authertication)是系统查核用户的身份证明的过程。人们常把这两项工作统称为身份验证(或身份鉴别),是判明和确认通信双方真实身份的两个重要环节。
Web网上采用的安全技术
在Web网上实现网络安全一般有SHTTP/HTTP和SSL两种方式。
(一)、SHTTP/HTTP
SHTTP/HTTP可以采用多种方式对信息进行封装。封装的内容包括加密、签名和基于MAC 的认证。并且一个消息可以被反复封装加密。此外,SHTTP还定义了包头信息来进行密钥传输、认证传输和相似的管理功能。SHTTP可以支持多种加密协议,还为程序员提供了灵活的编程环境。
SHTTP并不依赖于特定的密钥证明系统,它目前支持RSA、带内和带外以及Kerberos密钥交换。
(二)、SSL(安全套层) 安全套接层是一种利用公开密钥技术的工业标准。SSL广泛应用于Intranet和Internet 网,其产品包括由Netscape、Microsoft、IBM 、Open Market等公司提供的支持SSL的客户机和服务器,以及诸如Apa che-SSL等产品。
SSL提供三种基本的安全服务,它们都使用公开密钥技术。
①信息私密,通过使用公开密钥和对称密钥技术以达到信息私密。SSL客户机和SSL服务器之间的所有业务使用在SSL握手过程中建立的密钥和算法进行加密。这样就防止了某些用户通过使用IP packet sniffer工具非法窃听。尽管packet sniffer仍能捕捉到通信的内容, 但却无法破译。 ②信息完整性,确保SSL业务全部达到目的。如果Internet成为可行的电子商业平台,应确保服务器和客户机之间的信息内容免受破坏。SSL利用机密共享和hash函数组提供信息完整性服务。③相互认证,是客户机和服务器相互识别的过程。它们的识别号用公开密钥编码,并在SSL握手时交换各自的识别号。为了验证证明持有者是其合法用户(而不是冒名用户),SSL要求证明持有者在握手时对交换数据进行数字式标识。证明持有者对包括证明的所有信息数据进行标识以说明自己是证明的合法拥有者。这样就防止了其他用户冒名使用证明。证明本身并不提供认证,只有证明和密钥一起才起作用。 ④SSL的安全性服务对终端用户来讲做到尽可能透明。一般情况下,用户只需单击桌面上的一个按钮或联接就可以与SSL的主机相连。与标准的HTTP连接申请不同,一台支持SSL的典型网络主机接受SSL连接的默认端口是443而不是80。
当客户机连接该端口时,首先初始化握手协议,以建立一个SSL对话时段。握手结束后,将对通信加密,并检查信息完整性,直到这个对话时段结束为止。每个SSL对话时段只发生一次握手。相比之下,HTTP 的每一次连接都要执行一次握手,导致通信效率降低。一次SSL握手将发生以下事件:
1.客户机和服务器交换X.509证明以便双方相互确认。这个过程中可以交换全部的证明链,也可以选择只交换一些底层的证明。证明的验证包括:检验有效日期和验证证明的签名权限。
2.客户机随机地产生一组密钥,它们用于信息加密和MAC计算。这些密钥要先通过服务器的公开密钥加密再送往服务器。总共有四个密钥分别用于服务器到客户机以及客户机到服务器的通信。
3.信息加密算法(用于加密)和hash函数(用于确保信息完整性)是综合在一起使用的。Netscape的SSL实现方案是:客户机提供自己支持的所有算法清单,服务器选择它认为最有效的密码。服务器管理者可以使用或禁止某些特定的密码。
㈤ 如何保证用户登录时提交密码已经加密
如何保证用户登陆时提交密码已经加密?密码是否已加密,需要客户端和服务端建立约定,双方按约定办事就行了。
这里提到的另一个问题是,如何保证传输安全?
最理想的方案当然是走 HTTPS 协议. HTTPS
在理论上是可靠的,但在国内会打一些折扣:你可以随便找一台电脑看看有没有安装商业公司或机构的根证书,这些根证书为线路某节点成为中间人提供了可能性;同时,在木马横行的年代,密码在加密提交前可能就被拿到了,此时
HTTPS
成了摆设,这是为什么国内流行密码控件的一个重要原因。
从成本和需求上考虑,对于众多对安全性要求不高的个人网站,仍然可以考虑采用
HTTP 传输,密码提交前通过 JavaScript 加密。由于
JavaScript
代码暴露在客户端,因此一般通过不可逆的加密方法加密密码,而对于任何摘要式的加密算法,都可以通过类似
md5 字典的方式直接查表获知弱密码,所以要混入
salt
以增加制作字典的成本。可想而知,解密只是时间成本的问题。因此这里的重要前提是“对安全性要求不高”。
如何验证密码呢?一个可行的方法是,客户端提交
md5(password)
密码(如上所述,此方法只是简单保护了密码,是可能被查表获取密码的)。服务端数据库通过
md5(salt+md5(password)) 的规则存储密码,该 salt
仅存储在服务端,且在每次存储密码时都随机生成。这样即使被拖库,制作字典的成本也非常高。
密码被 md5() 提交到服务端之后,可通过 md5(salt +
form['password'])
与数据库密码比对。此方法可以在避免明文存储密码的前提下,实现密码加密提交与验证。
这里还有防止 replay
攻击(请求被重新发出一次即可能通过验证)的问题,由服务端颁发并验证一个带有时间戳的可信
token (或一次性的)即可。
当然,传输过程再有 HTTPS 加持那就更好了。
最后,为什么要密码控件?原因之一是上面说的,要防止密码在提交前被截获。