什么是RSA加密算法?前端常见的加密算法介绍
更新时间:2024-04-02 来源:网络 作者:TopSSL

在业务http请求中,AES的密钥在前端随机生成,从服务器获取RSA的公钥,对AES的密钥进行非对称加密,把加密后的密钥在请求头中传给服务器,用AES对body进行加密。服务器收到请求头中的加密后的密钥,用RSA的密钥进行解密,得到明文的AES密钥,即可对body进行解密。md5有校验字符串一致性的特性,为避免请求被拦截后篡改body,可在发请求时,将body字符串进行一个md5加密后在请求头传输,服务器收到请求后,解密body后再md5与请求头的进行校验,可验证是否请求被篡改。

一、背景

在信息安全越来越受重视的今天,前端的各种加密也变得更加重要。通常跟服务器的交互中,为保障数据传输的安全性,避免被人抓包篡改数据,除了https的应用,还需要对传输数据进行加解密。

目前常见的加密算法可以分成三类

  • 对称加密算法:AES、...
  • 非对称加密算法:RSA、...
  • Hash算法:MD5、...

二、对称加密算法

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。

特点

  • 优点:算法公开、计算量小、加密速度快、加密效率高。
  • 缺点:在数据传送前,发送方和接收方必须商定好密钥,然后双方保存好密钥。如果一方的密钥被泄露,那么加密信息也就不安全了
  • 使用场景:本地数据加密、https通信、网络传输等

AES

AES:高级加密标准(Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。图片1

密钥:用来加密明文的密码。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取数据。

在项目中需要用到AES加密时,可以使用开源的js库:crypto-js

var CryptoJS = require("crypto-js");

var data = {id: 1, text: 'Hello World'};

// 加密生成密文
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret_key_123').toString();

// 解密得到明文
var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret_key_123');
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

三、非对称加密算法

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

特点

  • 优点:非对称加密与对称加密相比其安全性更好
  • 缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
  • 使用场景:https会话前期、CA数字证书、信息加密、登录认证等

RSA

RSA加密算法是非对称加密算法最常见的一种。RSA是1977年由Ron Rivest、Adi Shamir和Leonard Adleman一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。

图片

在项目中需要用到RSA加密时,可以使用开源的js库:jsencrypt

// 使用公钥加密
var publicKey = 'public_key_123';
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
var encrypted = encrypt.encrypt('Hello World');

// 使用私钥解密
var privateKey = 'private_key_123';
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(privateKey);
var uncrypted = decrypt.decrypt(encrypted);

四、Hash算法

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

特点

  • 优点:不可逆、易计算、特征化
  • 缺点:可能存在散列冲突
  • 使用场景:文件或字符串一致性校验、数字签名、鉴权协议

MD5

MD5是比较常见的Hash算法,对于MD5而言,有两个特性是很重要的,第一:明文数据经过散列以后的值是定长的;第二:是任意一段明文数据,经过散列以后,其结果必须永远是不变的。前者的意思是可能存在有两段明文散列以后得到相同的结果,后者的意思是如果我们散列特定的数据,得到的结果一定是相同的。

比如在登录时将密码进行 md5 加密再传输给服务器,服务器中的密码也是用 md5 加密后存储的,那么只要验证加密后的密文是否一致则可。

在项目中需要用到MD5加密时,可以使用开源的js库:JavaScript-MD5

var hash = md5('Hello World');
// b10a8db164e0754105b7a99be72e3fe5

五、Base64编码

Base64编码只是一种编码格式并不是加密算法,它可用于在HTTP环境下传递较长的标识信息。

特点

  • 可以将任意的二进制数据进行Base64编码
  • 数据加密之后,数据量会变大,变大1/3左右
  • 编码后有个非常显著的特点,末尾有个=号
  • 可进行反向解码
  • Base64编码具有不可读性

现代浏览器都提供了Base64编码、解码方法,btoa() 和 atob()

var enc = window.btoa('Hello World');
// SGVsbG8gV29ybGQ=

var str = window.atob(enc);
// Hello World

六、总结

在业务http请求中,AES的密钥在前端随机生成,从服务器获取RSA的公钥,对AES的密钥进行非对称加密,把加密后的密钥在请求头中传给服务器,用AES对body进行加密。服务器收到请求头中的加密后的密钥,用RSA的密钥进行解密,得到明文的AES密钥,即可对body进行解密。md5有校验字符串一致性的特性,为避免请求被拦截后篡改body,可在发请求时,将body字符串进行一个md5加密后在请求头传输,服务器收到请求后,解密body后再md5与请求头的进行校验,可验证是否请求被篡改。


RSA加密算法补存说明:

RSA加密算法是一种[非对称加密算法],在公开密钥加密和电子商业]中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个与之等效的算法,但该算法被列入机密,直到1997年才得到公开。

对极大整数做[因数分解]的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式破解。到2020年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被破解的。

1983年9月12日麻省理工学院在[美国]为RSA算法申请了[专利]这个专利于2000年9月21日失效。^[[4]]^由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不被承认。

RSA加密算法是一种非对称加密算法,它的安全性基于大数质因数分解的难度。RSA算法涉及三个步骤:密钥生成、加密和解密。在密钥生成阶段,选取两个大素数p和q,计算它们的乘积n=p*q,以及欧拉函数值φ(n)=(p-1)*(q-1)。然后随机选择一个整数e,使得1<e<φ(n),且e与φ(n)互质。最后计算e对于φ(n)的模反元素d,使得e*d≡1modφ(n)。公钥为(e, n),私钥为(d, n)。

加密过程是将明文信息按照一定的规则转换为数字串x,使得0<x<n。然后通过公钥对x进行加密,得到密文y。解密过程则是使用私钥对密文进行解密,得到明文信息。具体的加密和解密过程涉及到模幂运算,即求x的e次方对n取模的结果。

RSA算法在实际应用中需要特别注意安全问题。是关键,必须保证私钥的安全性。同时,由于RSA算法的计算量较大,对于大量数据的加密和解密效率较低。因此,在实际应用中通常会将RSA算法与其他对称加密算法结合使用,以提高加密和解密的效率。

此外,RSA算法还有多种变种和应用场景。例如,RSA签名算法可以用于验证数据的完整性和身份认证。在数字支付、电子银行等金融领域,RSA算法被广泛应用于保障数据传输)和存储的安全性。在网络安全领域,RSA算法也被用于实现SSL/TLS协议等网络安全协议,保护网络传输数据的安全性。

总之,RSA加密算法是一种重要的非对称加密算法,其基本原理和实现过程对于理解现代密码学具有重要意义。在实际应用中,需要根据具体场景选择合适的加密方案,并注意安全问题。对于RSA算法的应用和变种,也需要根据实际需求进行选择和调整。通过深入了解RSA算法的原理和实现过程,我们可以更好地应对网络安全挑战,保护数据的安全性和隐私性。

标签

DV多域名SSL证书 (限量发售)
162/年
  • 锐安信多域名证书 ,保护最高250个域名
  • 无需提交任何材料,验证域名所有权即可
  • 签发速度5-10分钟
  • 目前价格超群速速选用!
立即申请
高性价比ssl证书推荐

尽快选购申请,价格会随时改变!

    立即加入,让您的品牌更加安全可靠!
    申请SSL证书

    © 2004-2024 北京传诚信  版权所有 TopSSL提供免费和收费SSL证书申请  北京市朝阳区鹏景阁大厦16层 Cookies政策|SSl证书服务协议|用户协议|隐私政策|反馈建议|网站地图