最简人机交互-加解密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最简人机交互-加解密相关的知识,希望对你有一定的参考价值。
参考技术A 上学时递小纸条,尤其是需要中间人传递时,是不是使用过一套约定的符号代替普通的文字?特别有必要!图
广义来讲,保护信息的各种方式都属于加密范畴,而保护的形式、角度、等级和目标是多种多样的。
电视剧里,经常有材料被情敌偷偷修改然后蒙冤的场景。何解?
策略:让内容中每一个字节都参与一项运算得出一个结果记录下来,如果计算结果变了,说明内容被修改过。
这里运算得出的结果叫做摘要,这个算法叫消息摘要算法,也叫单向散列函数。算法的科学性很重要,常见的算法有:MD5、SHA1、SHA256、SHA512、HmacMD5、HmacSHA1、HmacSHA256 等。
这个,只能说难免会被别人看到。
策略:使用密钥变换内容,让别人看到也不知道为何物,通过密钥才可还原内容。
这种通过相同的密钥来加密和解密的算法,叫对称加密算法。常见算法DES、3DES(TripleDES)和AES(Advanced Encryption Standard)等。AES 根据密钥长度不同又分为AES-128 AES-192 AES-256 对应16 24 32 字节。
这些算法,通常是按块来进行加密的,如 16 个字节为一块。当最后一块不够 16 个字节时,通常是采用补齐的策略,补齐的方式也有不同讲究。
策略一,数据长度不对齐时使用0填充,否则不填充,但补的0解密后无法区分是补的还是原本就有的,只适合以\0结尾的字符串加密,此谓之 ZeroPadding。
策略二,补充的字节值设定为补充的数量,如要补充5个字节,则这5个字节的值都为 5,这样根据最后一个字节可得到填充数据的长度,在解密后可以准确删除填充的数据。但如果刚好整块无需补充,为了仍然满足最后一个字节表示填充的数据长度,填充一整块,值为块长度。此种方式有 PKCS7Padding,它假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。PKCS5Padding,PKCS7Padding的子集,块大小固定为8字节。
分块加密时,每块采用完成相同的加密过程,则可以并行加密再拼接,但当内容中有多块相同的内容时加密结果会一样,而这种重复会为破解提供线索,于是多种加密模式被提出。以下是两种最常见的模式。
Electronic Code Book(ECB)
电子密码本模式
最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。
Cipher Block Chaining(CBC)
密码分组链接模式
明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。
对称加密中,接收方需要知道密钥,这个密钥本身的保密就成为了问题。密钥泄漏,意味着正确解密的消息也变得不可靠,也许是伪造的。
策略:公开密钥,即发给我的消息,使用公开密钥加密,我收到之后只可用我的私有密钥解密。
此谓之非对称加密算法,一种强大的密钥保密方法。这离不开理论上的研究成果。
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。
为了验证是不是对的人,可以要求发送放对内容提取摘要,并使用其私钥加密,将结果附在后边作为签名一并发送。这样,就可以使用发送放的公钥来解密这个签名并验证其一致性,如果一致说明是对的人发过来的。此过程谓之签名验签。
使用最广泛的是RSA算法。
很多常见的加密算法在 CryptoJS 中有实现,首先,在控制台引入扩展脚本。
加密结果 U2FsdGVkX1/Ry7m4YU7aTXizLMAGhn2EwZf555rz8neh6FP6/4p9CUaZpnBxvOKT
解密过程
加密的内容为16进制数据时,可以利用以下方式将16进制字符串转换成字节数组。
计算结果 c6a13b37878f5b826f4f8162a1c8d879
CryptoJS 当前尚未支持 RSA,可以引入以下 JS 扩展。
使用公钥加密
OVNmfqDMAxHoiMbNHNQ4Olrb0BHGLHEPXM0EAJ/hTwEJsz+igrLIPnrqf1ABmWnoj6cOOcGNroYLa2xZ9/TkaF5UKG+H+RrjpbHHQVe3mWWlDsX9bZ/m8lP3izntwKHdklH+2vfeOlSJ3+PK3O6ILWvaVM4PVCzVo9lPiN7NkIE=
使用私钥解密
反过来使用私钥加密公钥解密也是可以的,只是一般的工具方法,只会提供私密生成签名,公钥验证签名,但这足够了。
更详细用法,请参考 https://github.com/travist/jsencrypt/
直接来看看二战期间的故事,以下内容引用自 https://zhidao.baidu.com/question/13366735.html
人机交互 第二次作业 0014
人机交互 第二次作业
lalala
qqqqq
以上是关于最简人机交互-加解密的主要内容,如果未能解决你的问题,请参考以下文章