常见加密算法比较

加密算法

常见的 对称加密 算法主要有 DES(数据加密标准)、3DES(三重DES)、AES(高级加密标准) 和Blowfish(河豚鱼)等,常见的 非对称算法 主要有 RSA、DSA 等,散列算法 主要有 SHA-1、SHA-256、MD5 等。

HASH算法(散列算法)

目前常用的是SHA-256算法是SHA-1的后继算法。
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。MD5比较老,比较容易碰撞。

在这里插入图片描述

对称密码算法

对称密码学的优点是效率高,开销小,适合加密大量的数据。但对称密码学要求通信双方事先协商好密钥,这就要求在协商过程中必须做好保密,密钥只能让使用的人知道,不能泄露。

AES、DES、3DES 都是 对称 的 块加密算法,加解密 的过程是 可逆的。

1、DES是IBM提出的,第一个基于Lucifer算法的加密技术,作为第一个加密标准,安全性低。
2、3DES和DES使用同样的算法,只是做了三次加密来提升安全级别。
3、AES旨在取代DES加密技术。AES128、AES192、AES256区别是密钥长度和加密轮数不同,AES128性能最好,AES256安全性最高,针对AES唯一的破解方式就是暴力破解。AES本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。
4、Blowfish由Bruce Schneier发明的一种在世界范围被广泛使用的加密方式。Blowfish使用16到448位不同长度的密钥对数据进行16次加密。这样黑客们基本不可能对其进行解密。暂时还没有针对blowfish的破解。

在这里插入图片描述

非对称加密算法

又称为 公开密钥加密算法。它需要两个密钥,一个称为 公开密钥 (public key),即 公钥,另一个称为 私有密钥 (private key),即 私钥。目前常用的是RSA算法

非对称密码学使用场景

数据加解密

与对称密码学相比,公钥密码学(非对称密码学)加密数据的计算非常复杂,而且开销大、速度较慢,所以不适用于加密大量数据的场景。在实际使用中,通信双方通常会使用公钥密码学来交换密钥素材,双方最终计算出密钥,而用对称密码学来加密实际的数据,两者配合使用,保证了加密速度和安全性。

真实性验证

除了加解密,RSA 还能实现真实性验证,即身份认证功能,这也是利用了公钥密码学中由任一个密钥加密的信息只能用另一个密钥进行解密这一原理。
加解密功能是数据发送方使用接收方的公钥加密,接收方使用自己的私钥解密。而身份认证功能是被认证方使用自己的私钥进行加密,认证方使用被认证方的公钥进行解密。

完整性验证

使用私钥加密公钥解密这种方式,还能实现完整性验证,即签名功能。所谓签名,就是在数据的后面再加上一段内容,可以证明数据没有被修改过。
原理:你有一个需要被验签的原串A。

步骤一:选择hash算法将A进行hash得到摘要(hash_a);
步骤二:将hash_a进行加密,得到加密值encrypt_a;
步骤三:将原串A和加密的encrypt_a发给第三方,第三方进行验签。第三方先解密encrypt_a,得到一个hash值hash_a1,然后对原串A使用同样的hash算法进行hash,得到的即为加密前的hash_a,如果hash_a = hash_a1, 那么验签成功。

RSA使用私钥对信息加密来做签名,使用公钥解密去验签。

HASH密码学可以将任意长的字符串通过哈希计算出固定长度字符串,并且该计算是单向运算,无法逆推。最重要的是,原字符串任意字符的变化都会导致不同的计算结果。HASH计算后得出的信息通常称为原字符串的摘要信息,也可以称为指纹信息。通过对比摘要信息,就可以判断数据是否被修改,所以 HASH密码学通常用于保证数据的完整性。

### 关于 `window.parent.postMessage` 的异常处理 在前端开发中,跨域通信是一个常见的需求。通过 `window.postMesssage()` API 可以实现父页面与 iframe 子页面之间的安全跨域通信[^1]。然而,在实际应用过程中可能会遇到一些异常情况,尤其是涉及 `window.parent.postMessage` 时。 #### 异常原因分析 当调用 `window.parent.postMessage` 出现异常时,可能的原因包括但不限于以下几点: 1. **目标窗口未定义或不可访问** 如果当前 iframe 页面无法找到其父级窗口(即 `window.parent` 不可用),则会抛出错误。这可能是由于 iframe 和父页面不在同一域名下,并且没有正确设置 CORS 或其他权限配置所致[^2]。 2. **目标原地址不匹配** 使用 `postMessage` 发送数据时,第二个参数指定了接收方的目标原地址(origin)。如果指定的 origin 参数不符合实际情况,则可能导致消息发送失败并触发异常[^3]。 3. **事件监听器缺失** 即使成功发送了消息给父页面或其他关联窗口,但如果对方没有注册相应的 `message` 事件监听器来捕获该消息,则不会有任何响应行为发生[^4]。 #### 解决方案 以下是针对上述常见问题提出的解决方案: ##### 1. 验证目标窗口是否存在 在尝试向父页面发送消息之前,应先确认 `window.parent` 是否存在以及是否可被正常访问: ```javascript if (window.parent && window !== window.top) { try { window.parent.postMessage('Hello Parent', '*'); } catch (error) { console.error('Failed to send message:', error); } } else { console.warn('No parent frame detected.'); } ``` ##### 2. 正确设定目标原地址 为了提高安全性,建议尽可能精确地提供目标站点的具体 URL 地址而非通配符 (`*`) 。例如: ```javascript const targetOrigin = 'https://example.com'; try { window.parent.postMessage({ data: 'Sample Data' }, targetOrigin); } catch (e) { console.log(e.message); // 处理任何潜在错误 } ``` ##### 3. 添加事件监听器用于接收反馈信息 确保父页面已经设置了合适的 `message` 事件处理器以便能够接收到来自子框架的消息回复: ```javascript // 在父页面上添加如下代码片段 window.addEventListener('message', function(event) { const allowedOrigins = ['http://child-domain.example']; if (!allowedOrigins.includes(event.origin)) return; console.info(`Received from child: ${event.data}`); }); ``` #### 总结 通过对以上几个方面的调整优化,基本可以有效规避大部分由 `window.parent.postMessage` 所引起的运行期错误现象。同时也要注意到现代浏览器的安全机制日益严格,因此务必遵循最佳实践指南来进行操作以免违反相关政策规定而遭到屏蔽拦截等问题影响用户体验效果。 ```javascript // 完整示例演示如何健壮地实施跨域通讯逻辑 function safePostToParent(data, targetOrigin='*') { if (!(window.parent && window !== window.top)) { throw new Error("Cannot access parent window."); } try { window.parent.postMessage(JSON.stringify(data), targetOrigin); } catch(err){ console.error("Error during posting:", err.stack || err.toString()); } } safePostToParent({ status:"ready"}, "https://parent-site.tld"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值