This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
component:data:zh [2023/12/10 15:28] hfsr [3级回调函数] |
component:data:zh [2023/12/10 15:35] (current) hfsr [样例] |
||
---|---|---|---|
Line 65: | Line 65: | ||
此扩展卡可用于向其他在游戏中或在现实中的人发送加密数据。既然我们有能力创建密钥对和Diffie-Hellman共享密钥,那么我们就可以与这些人建立加密连接。 | 此扩展卡可用于向其他在游戏中或在现实中的人发送加密数据。既然我们有能力创建密钥对和Diffie-Hellman共享密钥,那么我们就可以与这些人建立加密连接。 | ||
- | 使用密钥对进行加密时的基本原则为: | + | 使用密钥对进行加密时,基本步骤为: |
预备工作: | 预备工作: | ||
Line 73: | Line 73: | ||
**发送者**必须: | **发送者**必须: | ||
- | * \*\*\*读取**接收者**的公钥(`rPublic`),将其解序列化并重构密钥对象。 | + | * \*\*\*读取**接收者**的公钥(`rPublic`),将其解序列化并重构出密钥对象。 |
* 生成一个公钥(`sPublic`)和一个私钥(`sPrivate`)。 | * 生成一个公钥(`sPublic`)和一个私钥(`sPrivate`)。 | ||
* \*用`rPublic`和`sPrivate`生成加密密钥。 | * \*用`rPublic`和`sPrivate`生成加密密钥。 | ||
* 生成一个初始向量(IV)。 | * 生成一个初始向量(IV)。 | ||
* 使用`sPublic.serialize()`将`sPublic`转化为字符串 | * 使用`sPublic.serialize()`将`sPublic`转化为字符串 | ||
- | * *\*\*用serialization(串连)运行库将数据序列化,然后使用加密密钥和IV将其加密。 | + | * *\*\*用serialization(序列化)库将数据序列化,然后使用加密密钥和IV将其加密。 |
- | * 串连并发送信息,其中有明文形式的`sPublic`与IV。 | + | * 序列化并发送信息,其中有明文形式的`sPublic`与IV。 |
**接收者**必须: | **接收者**必须: | ||
- | * 读取**发送者**的私钥(`rPrivate`),将其解序列化并重构密钥对象。 | + | * 读取**发送者**的私钥(`rPrivate`),将其解序列化并重构出密钥对象。 |
- | * 接收信息,并使用serialization(串连)运行库将其解序列化。然后使用`data.deserializeKey()`解序列化`sPublic`。 | + | * 接收信息,并使用serialization(序列化)运行库将其解序列化。然后使用`data.deserializeKey()`解序列化`sPublic`。 |
* \*使用`sPublic`和`rPrivate`生成解密密钥。 | * \*使用`sPublic`和`rPrivate`生成解密密钥。 | ||
* 使用解密密钥和IV来解密信息。 | * 使用解密密钥和IV来解密信息。 | ||
* 解序列化解密后的信息。 | * 解序列化解密后的信息。 | ||
- | **注\*:**上文中使用了“加密密钥”和“解密密钥”两个术语。这两个密钥的每一字节都对应相同。这是因为这两个密钥都是使用`ecdh()`函数生成的。 | + | **注\*:**上文中使用了“加密密钥”和“解密密钥”两个术语。这两个密钥完全相同,因为这两个密钥都是使用`ecdh()`函数生成的。 |
- | **注\*\*:**上文说//你需要将`rPublic`手动传给**发送者**//。但是在使用握手协议的系统中情况并非如此。例如,**发送者**会让**接收者**知道自己的存在,然后**接收者**会回复给**发送者**一个公钥(可能还有附加信息,例如密钥长度)。为简单起见,以下示例将不涵盖握手协议的功能。 | + | **注\*\*:**上文说“你需要将`rPublic`手动传给**发送者**”。但是在使用握手协议的系统中情况并非如此。例如,**发送者**会让**接收者**知道自己的存在,然后**接收者**会回复给**发送者**一个公钥(可能还有附加信息,例如密钥长度)。为简单起见,以下示例不涵盖握手协议的功能。 |
- | **注\*\*\*:**上文与下文的示例说你需要将密钥和信息序列化/解序列化。总体来说,在你将数据(尤其是二进制形式的)写入文件或通过网络传输前串连它们是有益的。序列化能保证二进制数据“有结尾”,使你的脚本或shell读取时更加安全。 | + | **注\*\*\*:**上文与下文的示例提到需要将密钥和信息序列化/解序列化。总体来说,在你将数据(尤其是二进制形式的)写入文件或通过网络传输前对其序列化是有益的。序列化能保证二进制数据“有结尾”,使你的脚本或shell读取时更加安全。 |
若要发送加密数据: | 若要发送加密数据: |