Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
component:data:zh [2023/12/10 15:23]
hfsr [1级回调函数]
component:data:zh [2023/12/10 15:35] (current)
hfsr [样例]
Line 36: Line 36:
  
 - `encrypt(data:​string,​ key:string, iv:​string):​string`  ​ - `encrypt(data:​string,​ key:string, iv:​string):​string`  ​
-  使用给定密钥以及初始向量IV(最好为随机)对数据进行AES加密。+  使用给定密钥以及初始向量IV(最好为随机)对数据进行AES加密。 ​  
 +\\
 - `decrypt(data:​string,​ key:string, iv:​string):​string`  ​ - `decrypt(data:​string,​ key:string, iv:​string):​string`  ​
-  使用给定密钥以及初始向量IV对数据进行AES解密。+  使用给定密钥以及初始向量IV对数据进行AES解密。 ​  
 +\\
 - `random(len:​number):​string`  ​ - `random(len:​number):​string`  ​
   生成长度为 `len` 的随机二进制字符串。   生成长度为 `len` 的随机二进制字符串。
Line 46: Line 48:
  
 - `generateKeyPair([bitLen:​number]):​table,​ table`  ​ - `generateKeyPair([bitLen:​number]):​table,​ table`  ​
-  生成一对可用于多种加密算法的公钥与私钥。可选的第二个参数代表密钥长度,值可为256或384。 +  生成一对可用于多种加密算法的公钥与私钥。可选的第二个参数代表密钥长度,值可为256或384。 ​  
-   +  密钥类型包括"​ec-public"​和"​ec-private"​。密钥可以使用`key.serialize():​string`来序列化。密钥中还包含一个函数`key.isPublic():​boolean`。 ​  
-  密钥类型包括"​ec-public"​和"​ec-private"​。密钥可以使用`key.serialize():​string`来序列化。密钥中还包含一个函数`key.isPublic():​boolean`。+\\
 - `ecdsa(data:​string,​ key:​userdata[,​ sig:​string]):​string or boolean`  ​ - `ecdsa(data:​string,​ key:​userdata[,​ sig:​string]):​string or boolean`  ​
-  不给定签名则使用给定私钥生成数据的一份签名。若给定了签名则功能为使用公钥、先前生成的签名字符串以及原字符串验签名。+  不给定签名则使用给定私钥生成数据的一份签名。若给定了签名则功能为使用公钥、先前生成的签名字符串以及原字符串验签名。 ​  
 +\\
 - `ecdh(privateKey:​userdata,​ publicKey:​userdata):​string`  ​ - `ecdh(privateKey:​userdata,​ publicKey:​userdata):​string`  ​
-  使用第一个参数给出的用户私钥与第二个参数给出的用户公钥,生成一个Diffie-Hellman共享密钥。密钥基本关系的例为: +  使用第一个参数给出的用户私钥与第二个参数给出的用户公钥,生成一个Diffie-Hellman共享密钥。密钥基本关系的例为: ​  
-  `ecdh(userA.private,​ userB.public) == ecdh(userB.private,​ userA.public)`+  `ecdh(userA.private,​ userB.public) == ecdh(userB.private,​ userA.public)` ​  
 +\\
 - `deserializeKey(data:​string,​ type:​string):​table`  ​ - `deserializeKey(data:​string,​ type:​string):​table`  ​
   将密钥从字符串形式转化为其特有形式。   将密钥从字符串形式转化为其特有形式。
----- 
  
 样例 样例
Line 62: Line 65:
 此扩展卡可用于向其他在游戏中或在现实中的人发送加密数据。既然我们有能力创建密钥对和Diffie-Hellman共享密钥,那么我们就可以与这些人建立加密连接。 此扩展卡可用于向其他在游戏中或在现实中的人发送加密数据。既然我们有能力创建密钥对和Diffie-Hellman共享密钥,那么我们就可以与这些人建立加密连接。
  
-使用密钥对进行加密时基本原则为:+使用密钥对进行加密时基本步骤为:
  
 预备工作: 预备工作:
Line 70: 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读取时更加安全。
  
 若要发送加密数据: 若要发送加密数据: