-
我们需要明确,加密的作用是啥?
- 没人关心用户的密码是什么,只会关心能不能登录。只要能登录,拿到的是密码原文还是密码密文其实没区别。
-
我们考虑传输加密的情况
-
明文传输只有一种方式可以登录,就是通过密码原文
-
加密传输有两种方式可以登录,其一登录框的原文,另外一种是跳过登录框的密文。
-
如果传输加密方式和密码储存加密方式一样,存储密码加密就没有意义了。
-
-
我们考虑 加密传输和加密存储 相互组合的4种情况
-
第1种: 加密存储,加密传输。加入加密算法用的任意摘要算法。
结果:用户输入明文,前端必须知道加密算法,然后把密文传递给后端,等值比对。传输过程密文泄露,后可以直接用密文直接登录,后端数据库泄露以后所有用户账号都可以登录。 -
第2种:加密存储,明文密码传输。加入加密算法用的任意摘要算法。
结果:用户输入明文,前端不知道用的啥加密算法,明文密码传递给后端以后偶,加密比对。传输过程明文密码泄露以后,可以直接登录,后端数据库泄露以后,别人不知道加密程序里面的加密方式,得不到密码原文,不会被被泄露。 -
第3种:明文存储,明文传输。
结果:用户输入明文,后端等值比对。传输过程,或者数据库泄露,都会被别的用户登录。 -
第4种:明文存储,加密传输。
结果:用户输入明文密码,前端需要知道加密算法,后端使用同样算法得到加密验证。传输过程密文泄露,用密文调用接口可以直接登录。数据库泄露,界面可以直接登录。
-
-
综合上结果,传输过程使用任意方式加密都没得用,不管是摘要算法,对称加密,还是非对称加密(除非通过另外一种安全的方式周期性的更换密钥)。因为你的登录接口,接受的就是这个东西,传输过程被窃取了,就能直接用。
-
明文存储密码数据库泄露的时候,必定会导致所有用户的账号可以被攻击者登录。密文存储密码的时候,如果攻击者不知道你程序里面使用的啥加密算法,即便它知道了密文也不知道原文,不能登录。前提是加密算法不会被很容易猜出来,或者说不容易得到原文。
-
谨记,后端密码加密存储,然后前端用同样的加密方式加密用户密码原文,然后传递给后端做等值比对是最不安全的做法,和全明文无异,甚至是脱了裤子放屁。如果穿过程用另外一种加密方式保证传输安全是可以的,但是绝对不能和数据库存储的加密方式一样。