最近用react做了一个自定义密码键盘,用于输入敏感信息,那么前端的加密自然需要纳入考虑的范畴之内,所以特意写此文来记录一下探究问题的学习思路和网上资料的一些整理
关键词句
JS代码本身的加密
js的不可读化处理分为三个方面:压缩(compression)、混淆(obfuscation) 和加密(encryption)。 (不可读化处理,这是我自己发明的术语,一切会增加代码不可读性的代码转换, 都可以这么叫,“增加代码不可读性”可能是代码转换的结果或者目的)
压缩这一操作的目的,是让最终代码传输量 (不代表代码量, 也不代表文件体积)尽可能小。压缩js的工具,常见的有:YUI Compressor、UglifyJS、Google Closure Compiler 等。通常在代码压缩的过程中,只改变代码的语法,代码的语义和控制流不会有太大改变。常见做法是把局部变量缩短化,把一些运算进行等价替换等。代码压缩对于代码保护有一些帮助,但由于语义和控制流基本没变,起不了太大作用。在压缩层面上,代码不可读只是一种附带伤害,不是最终目的。
混淆这一操作的目的,是让代码尽可能地不可读,主要用作代码保护。让代码不可读,增加分析的难度,这是唯一目的。混淆过后文件体积变大一倍也没关系,代码量变多也没关系,运算慢50% 也没关系。常见的做法有:分离常量、打乱控制流、增加无义代码、检查运行环境如果不对就罢工,等等。在混淆层面上,代码不可读是最终目的。值得一提的是,Google Closure Compiler 的 Advance Level Compression 会压缩类和对象的成员,其压缩结果很难分析,也可以认为是一种混淆,但兼容性不太好。
加密
有加密就有解密,意味着加密操作可逆,密文可以明文化。就这样看来,在Web界,可以称之为加密的东西包括:HTTPS传输、JavaScript实现对称加密或者不对称加密等等。这样看来,不可逆的代码压缩和混淆就不能列入加密这个范畴了。非要找一个可以称之为加密,又经常被人误解为压缩和混淆的东西,Dean Edwards 的 Dean Packer/Unpacker 可以拿来做个例子。作者:鲁小夫
链接:https://www.zhihu.com/question/28468459/answer/41622094
来源:知乎
话题:求助前端JS都是用什么加密的?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
常见加密方式
Base64
Hash算法
我需要首先从直观层面阐述哈希(Hash)和加密(Encrypt)的区别:
概括来说,哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。
具体来说,两者有如下重要区别:1、哈希算法往往被设计成生成具有相同长度的文本,而加密算法生成的文本长度与明文本身的长度有关。 2、哈希算法是不可逆的,而加密算法是可逆的。
这里的不可逆有两层含义,一是“给定一个哈希结果R,没有方法将E转换成原目标文本S”,二是“给定哈希结果R,即使知道一段文本S的哈希结果为R,也不能断言当初的目标文本就是S”。其实稍微想想就知道,哈希是不可能可逆的,因为如果可逆,那么哈希就是世界上最强悍的压缩方式了——能将任意大小的文件压缩成固定大小。
传送门1:哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
传送门2:什么是哈希算法?
MD5
SHA1
彩虹表
彩虹表(Rainbow Table)是一种破解哈希算法的技术,是一款跨平台密码破解器,主要可以破解MD5、HASH等多种密码。
传送门:彩虹表
加盐HASH
传送门:加盐密码保存的最通用方法是?
RSA
RSA是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。进入正题之前,我先简单介绍一下,什么是”公钥加密算法”。
对称加密
1976年以前,所有的加密方法都是同一种模式:
(1)甲方选择某一种加密规则,对信息进行加密;
(2)乙方使用同一种规则,对信息进行解密。
由于加密和解密使用同样规则(简称”密钥”),这被称为”对称加密算法”(Symmetric-key algorithm)。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
非对称加密
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为”Diffie-Hellman密钥交换算法”。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
这种新的加密模式被称为”非对称加密算法”。
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。下面,我就进入正题,解释RSA算法的原理。文章共分成两部分,今天是第一部分,介绍要用到的四个数学概念。你可以看到,RSA算法并不难,只需要一点数论知识就可以理解。
RSA原理
太复杂……请移至传送门阅读理解,基本步骤如下:
1、服务端生成公钥,私钥,下发公钥给客户端
2、客户端使用公钥(盐)对密码加密
摘录传送门:RSA算法原理-阮一峰的网络日志
先挖这么多,回头再填坑