【整挺好协议 - OpenPGP 加密协议】

Open-PGP是什么

Open-PGP(缩写: Pretty Good Privacy): 一种协议,定义了加密消息、签名、私钥和用于交换公钥的证书统一标准。
初看这个名字,感觉也是比较随意 Pretty Good 哈哈哈,实际研究一下,发现也是整挺好的协议。
Good请添加图片描述

作用

OpenPGP是一种基于密钥的加密方法,用于数据加密,以便只有预期的收件人才能接收和解密它们。

典型场景:端到端加密 ,发送方使用接收方的公钥进行加密,只有接收方使用自身的私钥才能看到加密内容,中间途径的服务器都无法查看,这样只有发送方和接收方知道数据内容,极大的保障了数据的隐私。

那么具体流程和原理是什么样,我们继续

原理

  • 对于发送方加密过程:先生成随机密钥,并预先获得接收端公钥,再使用不同的加密方式原始数据 和 随机钥匙 分别加密,
    • 原始数据加密过程**:**使用 随机钥匙 采用 对称加密方式原始数据 进行加密
    • 随机钥匙加密过程:使用 接收方公钥 采用 非对称加密方式(RSA) 对 随机钥匙 进行加密
  • 对于接收方解密过程:拿到加密数据后, 分别对 加密后的随机钥匙加密后的原始数据 进行解密,
    • **随机钥匙:**使用 接收方自己的私钥加密后的随机钥匙 进行解密,得到 随机钥匙
    • 原始数据:使用随机钥匙加密后的原始数据 进行解密,得到 原始数据

具体流程如下,左侧为发送方加密过程,右侧为接收方解密过程

加解密流程

优势

由上,随机密钥 使用非对称加密 , 原始数据 使用对称加密,这样是有好处的,因为非对称加密相较于对称加密,会涉及更复杂的数学运算,计算成本和资源消耗会更多,这样尤其在原始数据大的情况下,使用对称加密更合适,保障安全的同时,也可以很大减少加密成本。

其实我们每天都用https - tls 加密,也是这个思路 ,发送端可以是用户使用的浏览器 ,接收端是服务器,浏览器和服务器在连接时 ,

  • 非对称加密key:发送端,先生成随机key,并获得浏览器的公钥,在http通信中,以会话连接为单位,所以这个key也被称为session key,再使用服务器的公钥 对key进行非对称加密,并传给服务器,服务器再用自身私钥进行解密,获取key。
  • 对称加密传输数据:后续的数据传输过程中,双方都使用这个key对要传输的原始数据进行对称加解密。

同样按照这个思路实现的Open-PGP,也是节省又安全 ,整挺好,Pretty Good!

Pretty Good!

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenPGP是一种开放标准的加密协议,可以用于对数据进行端到端的加密和数字签名。在前端加密中,可以使用JavaScript的OpenPGP.js库来实现OpenPGP加密和解密。 以下是使用OpenPGP.js库进行加密的基本步骤: 1.导入OpenPGP.js库和必要的依赖库。 ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/openpgp/4.10.7/openpgp.min.js"></script> ``` 2.生成RSA密钥对。 ```javascript const options = { userIds: [{ name:'Alice', email:'alice@example.com' }], numBits: 4096, passphrase: 'passphrase' }; openpgp.generateKey(options).then(function(key) { const privateKey = key.privateKeyArmored; const publicKey = key.publicKeyArmored; }); ``` 3.使用公钥加密数据。 ```javascript const plaintext = 'Hello world!'; const publicKey = '...'; // 从密钥对中获取公钥 const message = await openpgp.message.fromText(plaintext); const encrypted = await openpgp.encrypt({ message: message, publicKeys: (await openpgp.key.readArmored(publicKey)).keys }); console.log(encrypted.data); // 加密后的数据 ``` 4.使用私钥解密数据。 ```javascript const ciphertext = '...'; // 加密后的数据 const privateKey = '...'; // 从密钥对中获取私钥 const message = await openpgp.message.readArmored(ciphertext); const decrypted = await openpgp.decrypt({ message: message, privateKeys: (await openpgp.key.readArmored(privateKey)).keys }); console.log(decrypted.data); // 解密后的数据 ``` 以上是基本的加密和解密示例,具体实现可以根据实际需求进行调整。同时,还需要注意保护私钥的安全,避免私钥被泄露。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值