GM/T 0087-2020 浏览器密码应用接口规范.pdf

GM/T 0087-2020 浏览器密码应用接口规范.pdf
仅供个人学习
反馈
标准编号:GM/T 0087-2020
文件类型:.pdf
资源大小:10.4 M
标准类别:电力标准
资源ID:299016
下载资源

GM/T 0087-2020 标准规范下载简介

GM/T 0087-2020 浏览器密码应用接口规范.pdf

GM/T00872020

其中,KeyFormat指定密钥串行化的格式。可识别的密钥格式取值为: "raw" 非格式化字节序列。用于秘密密钥。 "pkcs8" 符合RFC5280格式的私钥信息格式的DER编码。 "jwk” 密钥作为JsonWebKey对象并为JavaScript对象

其中T/SHXFXH004-2019标准下载,KeyFormat指定密钥串行化的格式。可识别的密钥格式取值为: "raw" 非格式化字节序列。用于秘密密钥。 "pkcs8" 符合RFC5280格式的私钥信息格式的DER编码。 "jwk” 密钥作为JsonWebKey对象并为JavaScript对象

encrypt加密方法返回一个新的承诺对象,该对象使用指定的AlgorithmIdentifier和所提供的 ptoKey来加密数据。它应执行如下步骤: a)将算法和密钥分别作为algorithm和key参数传递至加密方法; b)将数据作为data参数的克隆数据结果传递至加密算法; C 将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为"en crypt"; d) 若出错,返回带有normalizedAlgorithm的承诺拒绝; e) 设置promise为新的Promise; 返回promise并异步完成余下的步骤; 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法; h 若normalizedAlgorithm的name成员不同于密钥的[[algorithm门内部组织的name属性,抛 出 InvalidAccessError; 1 若密钥的[[usages]内部组织不包含“encrypt”条目,抛出InvalidAccessError; J 将ciphertext设置为加密操作的结果,该操作过程指定了normalizedAlgorithm加密操作、密 钥和明文; k) 用ciphertext作为Promise对象返回

decrypt解密方法返回一个新的承诺对象,该对象使用AlgorithmIdentifier和提供的CryptoKey对 文进行解密。它应执行下列步骤: 将算法和密钥分别作为algorithm和key参数传递至解密方法; D 将数据作为data参数的克隆数据结果传递至解密算法; C) 将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为“de crypt"; d) 若出错,返回带有normalizedAlgorithm的承诺拒绝: e 设置promise为新的Promise; f 返回promise并异步完成余下的步骤; g 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法; h) 若normalizedAlgorithm的name成员不同于密钥的[[algorithm内部组织的name属性.抛 出InvalidAccessError; 若密钥的[[usages]]]内部组织不包含"decrypt”条目,抛出InvalidAccessError; j 将plaintext设置为解密操作的结果,该操作过程指定了特定密钥、算法和密文下的normali zedAlgorithm解密操作; k 用plaintext作为Promise对象返回

decrypt解密方法返回一个新的承诺对象,该对象使用AlgorithmIdentifier和提供的CryptoKey对 文进行解密。它应执行下列步骤: a 将算法和密钥分别作为algorithm和key参数传递至解密方法; b)将数据作为data参数的克隆数据结果传递至解密算法; c) 将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为“de crypt"; d) 若出错,返回带有normalizedAlgorithm的承诺拒绝: e 设置promise为新的Promise; f) 返回promise并异步完成余下的步骤; g 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法; h 若normalizedAlgorithm的name成员不同于密钥的[[algorithm内部组织的name属性.抛 出InvalidAccessError; 1) 若密钥的[[usages]]内部组织不包含"decrypt”条目,抛出InvalidAccessError; j 将plaintext设置为解密操作的结果,该操作过程指定了特定密钥、算法和密文下的normali zedAlgorithm解密操作; k 用plaintext作为Promise对象返回

sign签名方法返回一个新的承诺对象,该对象使用AlgorithmIdentifier和提供的CryptoKey对数 居进行签名。它应遵循下列步骤: a)将算法和密钥分别作为algorithm和key参数传递至签名方法; b 将数据作为data参数的克隆数据结果传递至签名算法; 将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为 “sign”; d) 若出错,返回带有normalizedAlgorithm的承诺拒绝; e) 设置promise为新的Promise; 返回promise并异步完成余下的步骤; g 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法; h) 若normalizedAlgorithm的name成员不同于密钥的[[algorithm]内部组织的name属性,抛 出InvalidAccessError; 1 若密钥的[[usages]内部组织不包含“sign”条目,抛出InvalidAccessError; J 将plaintext设置为解密操作的结果,该操作过程指定了特定密钥、算法和消息数据下的nor malizedAlgorithm签名操作; k)将Promise对象返回

sign签名方法返回一个新的承诺对象,该对象使用AlgorithmIdentifier和提供的CryptoKey对数 居进行签名。它应遵循下列步骤: a)将算法和密钥分别作为algorithm和key参数传递至签名方法; b 将数据作为data参数的克隆数据结果传递至签名算法; 将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为 sign”; d) 若出错,返回带有normalizedAlgorithm的承诺拒绝: e) 设置promise为新的Promise; 返回promise并异步完成余下的步骤; 8 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法; h) 若normalizedAlgorithm的name成员不同于密钥的[[algorithm]内部组织的name属性,抛 出InvalidAccessError; 若密钥的[[usages]内部组织不包含“sign”条目,抛出InvalidAccessError; J 将plaintext设置为解密操作的结果,该操作过程指定了特定密钥、算法和消息数据下的nor malizedAlgorithm签名操作; k)将Promise对象返回

verify验证签名方法返回一个新的承诺对象,该对象使用Algorithmldentifier和提供的CryptoKe 对数据进行验签。它应遵循下列步骤: 将算法和密钥分别作为algorithm和key参数传递至验签方法; 将签名数据作为签名参数的data克隆数据结果传递至验签算法 将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为"verify”; d) 若出错,返回带有normalizedAlgorithm的承诺拒绝; e) 将数据作为数据参数的数据克隆结果传递至验签方法; f) 设置promise为新的Promise; 8 返回promise并异步完成余下的步骤; 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法: 若normalizedAlgorithm的name成员不同于密钥的[Lalgorithm内部组织的name属性,抛 出InvalidAccessError; 若密钥的[[usages]内部组织不包含“verify"条目,抛出InvalidAccessError; k) 将result设置为验签操作的结果,该操作过程指定了特定密钥、算法、签名和消息数据下的 normalizedAlgorithm验签操作; I)将result作为Promise对象返回

digest散列方法返回一个新的承诺对象,该对象使用AlgorithmIdentifier对数据进行散列操作 它应遵循下列步骤: a 将算法参数传递至散列方法; b) 将数据作为数据参数的data克隆数据结果传递至散列方法; c)将normalizedAlgorithm作为正规化算法的结果,将alg设置为algorithm,将op设置为"digest”;

e 设置promise为新的Promise; 返回promise并异步完成余下的步骤; 若余下的步骤或者调用的过程抛出异常或者拒绝承诺,则结束算法; h) 将result设置为散列操作的结果,该操作过程指定了算法和消息数据下的normalizedAlgorithm 验签操作; i)将result作为Promise对象返回

GM/T 00872020

k)若normalizedAlgorithm的name成员不同于baseKey的LLalgorithm」』内部组成的name属 性,抛出InvalidAccessError; 若baseKey的[[usages]]内部组成不包含“deriveKey”条目,抛出InvalidAccessError m)将length设置为调用取得密钥长度操作的结果,该操作使用derivedKeyType作为参数调用 normalizedDerivedKeyAlgorithm; n)将secret设置为执行派生比特操作的结果,该操作在key,algorithm和length参数下调用 normalizedAlgorithm; o)将result置为执行导人密钥操作的结果。该操作使用“raw”为format,secret为keyData,de rivedKeyType调用normalizedDerivedKeyAlgorithm p)若 result 的illtvpell 者"private”,同时usages为空,则抛出SyntaxEi

a)将format,algorithm,extractable和usages分别设置为传递至importKey方法的format, gorithm,extractable和keyUsages参数; b) 将normalizedAlgorithm置为正规化算法的结果,其中alg设置为algorithm且op设置为"i portKey"; 若出错,返回带有normalizedAlgorithm的承诺拒绝: d 将promise设置为新的Promise对象; 返回promise并异步完成余下的步骤: 若format等于字符串"raw”,"pkcs8”,或者"spki": 1)若传递至importKey方法的keyData参数是一个JsonWebKey字典,抛出TypeError: 2)将keyData置为传递至importKey方法的keyData参数克隆数据的结果。 若format等于字符串"jwk”:

GM/T 00872020

1)若传递至importKey方法的keyData参数不是一个JsonWebKey字典,抛出TypeError; 2)将keyData置为传递至importKey方法的keyData参数。 若余下的步骤或者调用的过程抛出异常或者若余下的步骤或者调用的过程抛出异常或者拒绝 承诺返回错误码,则结束算法承诺,则结束算法; 将result置为CryptoKey对象,该对象是使用keyData,algorithm,format,extractable和 usages指定normalizedAlgorithm导人密钥操作的结果; 1) 若result的[[type]]内部组成是“secret”或“private”同时usages为空,则抛出SyntaxError; j 设置result的[[extractable]]内部组成为extractable; 设置result的[[usages]]内部组成为usage的正规值; 将result作为Promise对象返回

调用exportKey导出密钥方法时,应执行下列步骤: a)将format和key分别设置为传递至exportKey方法的format和key参数; b) 将promise设置为新的Promise对象; 返回promise并异步完成余下的步骤: d) 若余下的步骤或者调用的过程抛出异常或者若余下的步骤或者调用的过程抛出异常或者拒绝 承诺返回错误码,则结束算法; 若key的[[algorithm]]内部组成的name成员不同于支持导出密钥操作的注册算法,则抛出 NotSupportedError; 1) 若key的[[extractable]]内部组成为否,则抛出InvalidAccessError; 8 设置result为导出密钥操作的结果。该操作由key的[[algorithm内部组成通过使用密钥值 和格式来指定; 将result作为Promise对象返回

调用wraptKey封装密钥方法时,应执行下列步骤: a)将format,key,wrappingKey和algorithm分别设置为传递至wrapKey方法的format,key wrappingKey和wrapAlgorithm的参数; b 将normalizedAlgorithm设置为正规化算法的结果,将alg设置为algorithm同时将op设置为 "wrapKey"; c) 若出错,将normalizedAlgorithm设置为正规化算法的结果,将alg设置为algorithm同时将 op设置为"encrypt"; d 若出错,返回带有normalizedAlgorithm的承诺拒绝; 将promise设置为新的Promise对象; f) 返回promise并异步完成余下的步骤; g) 若余下的步骤或者调用的过程抛出异常或者若余下的步骤或者调用的过程抛出异常或者拒绝 承诺返回错误码,则结束算法; h 若normalizedAlgorithm的name成员不同于支持加密和封装操作的已注册算法,抛出Not SupportedError; 1) 若normalizedAlgorithm的name成员不同于wrappingKey的[[algorithm]]内部组成的 name属性,抛出InvalidAccessError; j 若wrappingKey的[[usages]内部组成不包含"wrapKey"条目,抛出InvalidAccessError; k)若key的[[algorithm]]]内部组成所确定的algorithm不支持导出密钥的操作,抛出NotSup

调用wraptKey封装密钥方法时,应执行下列步骤: a 将format,key,wrappingKey和algorithm分别设置为传递至wrapKey方法的format,key WrappingKey和wrapAlgorithm的参数; b) 将normalizedAlgorithm设置为正规化算法的结果,将alg设置为algorithm同时将op设置为 "wrapKey"; c 若出错,将normalizedAlgorithm设置为正规化算法的结果,将alg设置为algorithm同时将 op设置为"encrypt"; 若出错,返回带有normalizedAlgorithm的承诺拒绝; e) 将promise设置为新的Promise对象; f) 返回promise并异步完成余下的步骤; g) 若余下的步骤或者调用的过程抛出异常或者若余下的步骤或者调用的过程抛出异常或者拒绝 承诺返回错误码,则结束算法; h) 若normalizedAlgorithm的name成员不同于支持加密和封装操作的已注册算法,抛出Not SupportedError; 1) 若normalizedAlgorithm的name成员不同于wrappingKey的[[algorithm刀]内部组成的 name属性,抛出InvalidAccessError j 若wrappingKey的[[usages]]内部组成不包含“wrapKey"条目,抛出InvalidAccessError; k)若key的[[algorithmJ内部组成所确定的algorithm不支持导出密钥的操作,抛出NotSup

GM/T00872020

调用unwraptKey封装密钥方法时,应执行下列步骤: 将format,unwrappingKey,algorithm,unwrappedKeyAlgorithm,extractable和usages分别 设置为传递至解封密钥方法的format,unwrappingKey,unwrapAlgorithm,unwrappedKeyAl gorithm,extractable和keyUsages的参数; b 将wrappedKey设置为传递至unwrap方法数据参数的数据克隆结果; 将normalizedAlgorithm设置为正规化算法的结果,其中alg设置为algorithm同时op设置为 "unwrapKey"; d) 若出错,将normalizedAlgorithm设置为正规化算法的结果,其中alg设置为algorithm同时 op设置为“decrypt"; e 若出错,返回带有normalizedAlgorithm的承诺拒绝; ) 将normalizedKeyAlgorithm设置为正规化算法的结果,其中alg设置为unwrappedKeyAlgo rithm同时将op设置为"importKey"; 若出错,返回带有normalizedKeyAlgorithm的承诺拒绝; 将promise设置为新的Promise对象; i 返回promise并异步完成余下的步骤; 1 若余下的步骤或者调用的过程抛出异常或者若余下的步骤或者调用的过程抛出异常或者拒 绝承诺返回错误码,则结束算法; k) 若normalizedAlgorithm的name成员不同于unwrappingKey的[[algorithm]内部组成的 name属性,则抛出InvalidAccessError; 1) 若[[algorithm]]的[[usages]]内部组成不包含“unwrapKey”条目,则抛出InvalidAccessEr ror; m) 若normalizedAlgorithm支持解封密钥操作:

调用unwraptKey封装密钥方法时,应执行下列步骤: 将format,unwrappingKey,algorithm,unwrappedKeyAlgorithm,extractable和usages分别 设置为传递至解封密钥方法的format,unwrappingKey,unwrapAlgorithm,unwrappedKeyAl gorithm,extractable和keyUsages的参数; D 将wrappedKey设置为传递至unwrap方法数据参数的数据克隆结果; 将normalizedAlgorithm设置为正规化算法的结果,其中alg设置为algorithm同时op设置为 "unwrapKey"; d) 若出错,将normalizedAlgorithm设置为正规化算法的结果,其中alg设置为algorithm同时 op设置为"decrypt"; 若出错,返回带有normalizedAlgorithm的承诺拒绝; 将normalizedKeyAlgorithm设置为正规化算法的结果,其中alg设置为unwrappedKeyAlgo rithm同时将op设置为"importKey”; g 若出错,返回带有normalizedKeyAlgorithm的承诺拒绝; h) 将promise设置为新的Promise对象; i 返回promise并异步完成余下的步骤; 1 若余下的步骤或者调用的过程抛出异常或者若余下的步骤或者调用的过程抛出异常或者拒 绝承诺返回错误码,则结束算法; k) 若normalizedAlgorithm的name成员不同于unwrappingKey的[[algorithm]内部组成的 name属性,则抛出InvalidAccessError; 1) 若[[algorithm]]的[[usages]]内部组成不包含“unwrapKey”条目,则抛出InvalidAccessEr ror; m)若normalizedAlgorithm支持解封密钥操作:

可识别算法名称为"SM3”,对应接口为杂漆功能digest。SM3算法在GM/T0004一2012中定义和规范。 a 如果normalizedAlgorithm的name成员与”SM3”字符大小写不敏感匹配的话,令result作为 输人消息message的SM3哈希算法(GB/T32905)的结果。 D 如果在操作过程中出现了错误,则抛出OperationError异常。 c)返回一个包含result的新的ArrayBuffer。

可识别算法名称为"SM3”,对应接口为杂漆功能digest。SM3算法在GM/T0004一2012中定义和规范。 a 如果normalizedAlgorithm的name成员与”SM3”字符大小写不敏感匹配的话,令result作为 输人消息message的SM3哈希算法(GB/T32905)的结果。 D 如果在操作过程中出现了错误,则抛出OperationError异常。 返回一个包含result的新的ArrayBuffer。

GM/T00872020

可识别算法名称为SM2”,对应接口包括generateKey,deriveBits,importKey,exportKey

GM/T 00872020

导出密钥内容如下。 令key是要导出的CryptoKey。 如果key的内部接口LLhandle」」表示的底层密钥资料不能访问,抛出OperationError异常。 如果format是“spki”: 如果key的内部接口[[type]]不是“public”,抛出InvalidAccessError异常。 令data是ASN.1结构体subjectPublicKeyInfo的一个实例。具有下列属性 设置algorithm域为ASN.1类型AlgorithmIdentifier。 设置algorithm的parameter域为ASN.1类型SM2Parameters,令其keyData是表示 key的内部接口[[handle]的所代表的椭圆曲线公钥的字符串,使用了非压缩形式。 >设置subiectPublicKey域为keyData

宇出密钥内容如下 令key是要导出的CryptoKey。 如果key的内部接口LLhandle」表示的底层密钥资料不能访问,抛出OperationError异常 如果format是“spki”: · 如果key的内部接口[[type]]不是“public”,抛出InvalidAccessError异常。 令data是ASN.1结构体subjectPublicKeyInfo的一个实例。具有下列属性。 设置algorithm域为ASN.1类型AlgorithmIdentifier。 设置algorithm的parameter域为ASN.1类型SM2Parameters,令其keyData是表示 key的内部接口[[handle]的所代表的椭圆曲线公钥的字符串,使用了非压缩形式。 设置subijectPublicKey域为keyData

签名内容如下。 a) 如果key中的内部接口[[type]不是“private”,抛出InvalidAccessError异常。 b) 令M是使用SM3算法对message进行摘要操作的结果。 C 令d是与key相关的SM2私钥。 d 令params是与key相关的EC域的参数。 e) 执行SM2的签名过程,M为消息,d为私钥。 f) 令r和s为SM2签名过程中生成的整数对。 g)令result为与全局对象this[HTML]相关的新的ArrayBuffer。

h)令n为使得n*8比椭圆曲线的基点的序的以2位底的对数大的最小的整数。 i)将r转换成长度为n的字节字符串,并附加到result后面。 j)将s转换成长度为n的字节字符串,并附加到result后面。

导人密钥内容如下。 a)令keyData是要导入的密钥数据。 如果format是“spki”: ·如果usages包含了不是“verify”的条目,抛出SyntaxError异常。

导人密钥内容如下。 a)令keyData是要导入的密钥数据。 b) 如果format是"spki": ·如果usages包含了不是“verify”的条目,抛出SyntaxError异常。

a)令key是要导出的CryptoKey。 如果key的内部接口[[handle]表示的底层密钥资料不能访问,抛出OperationError异常。 C) 如果format是“spki”: 如果key的内部接口[[type]不是“public”,抛出InvalidAccessError异常。 · 令data是ASN.1结构体subjectPublicKeyInfo的一个实例。 >设置data的algorithm域为ASN.1类型AlgorithmIdentifier。 》设置algorithm的parameter域为ASN.1类型SM2Parameters,令其keyData是表示key 的内部接口[[handle]]的所代表的椭圆曲线公钥的八字节字符串,使用了非压缩形式。 ·令result是与全局对象this[HTML]相关的新的ArrayBuffer,其中包含了data。 d)如果format是“pkcs8”: 如果key的内部接口[[type]]不是“private”,抛出InvalidAccessError异常。 ·令data是ASN.1类型privateKeyInfo的实例,具有下列属性: >设置version域为o。 >设置privateKeyAlgorithm域为ASN.1类型PrivateKeyAlgorithmIdentifier。 设置parameter域为ASN.1类型SM2Parameters。令其keyData为表示key的内部 接口[[handle]]]的所代表的椭圆曲线公钥的八字节字符串的SM2PrivateKey结构体

a)令key是要导出的CryptoKey。 如果key的内部接口[[handle]表示的底层密钥资料不能访问,抛出OperationError异常。 C) 如果format是“spki": 如果key的内部接口[[type]不是“public”,抛出InvalidAccessError异常。 · 令data是ASN.1结构体subjectPublicKeyInfo的一个实例。 >设置data的algorithm域为ASN.1类型AlgorithmIdentifier。 》设置algorithm的parameter域为ASN.1类型SM2Parameters,令其keyData是表示key 的内部接口[[handle]]的所代表的椭圆曲线公钥的八字节字符串,使用了非压缩形式。 ·令result是与全局对象this[HTML]相关的新的ArrayBuffer,其中包含了data。 d)如果format是“pkcs8”: 如果key的内部接口[[type]不是“private”,抛出InvalidAccessError异常。 令data是ASN.1类型privateKeyInfo的实例,具有下列属性: >设置version域为o。 >设置privateKeyAlgorithm域为ASN.1类型PrivateKeyAlgorithmIdentifier。 设置parameter域为ASN.1类型SM2Parameters。令其keyData为表示key的内部 接口[[handle]]的所代表的椭圆曲线公钥的八字节字符串的SM2PrivateKey结构体

解密内容如下。 a)如果normalizedAlgorithm的iv成员不是128字节长,抛出OperationError异常。 b)令paddedPlaintext是使用SM4算法执行了CBC解密操作的结果,normalizedAlgorithm的iv 成员的内容是IV输人参数,ciphertext的内容为输人密文。 c) 令p为paddedPlaintext的最后的字节

解密内容如下。 a)如果normalizedAlgorithm的iv成员不是128字节长,抛出OperationError异常。 b)令paddedPlaintext是使用SM4算法执行了CBC解密操作的结果,normalizedAlgorithm的iv 成员的内容是IV输人参数,ciphertext的内容为输人密文。 c) 令p为paddedPlaintext的最后的字节

d)如果p是O或者大于16,或者如果paddedPlaintext的最后p个字节任何一个值不是p,抛出 OperationError异常。 e)令plaintext是从paddedPlaintext的末端删除p个字节的结果。 f返回与全局对象this[HTML]相关的新的ArrayBuffer,包含了plaintext。

d)如果p是O或者大于16浙江省生活垃圾治理专项规划技术导则(试行).pdf,或者如果paddedPlaintext的最后p个字节任何一个值不是p,抛 OperationError异常。 e)令plaintext是从paddedPlaintext的末端删除p个字节的结果。 f)返回与全局对象this[HTML相关的新的ArrayBuffer,包含了plaintext

设置key的内部接口[[algorithm为algorithm。 返回key

加密内容如下。 a)令paddedPlaintext是添加了填充字节的ciphertext内容的结果。 b)令ciphertext是使用SM4作为块密码算法执行了ECB加密操作后的结果,paddedPlaintext 作为输人明文 返回与全局对象this[HTML相关的新的ArravBuffer.包含了ciphertext

令paddedPlaintext是添加了填充字节的ciphertext内容的结果。 ) 令ciphertext是使用SM4作为块密码算法执行了ECB加密操作后的结果,paddedPlaintext 作为输人明文 返回与全局对象this[HTML]相关的新的ArravBuffer.包含了cinhertext.

令paddedPlaintext是使用SM4算法执行了ECB解密操作的结果,ciphertext的内容为输人密 b) 令p为paddedPlaintext的最后的字节。 如果p是0或者大于16,或者如果paddedPlaintext的最后p个字节任何一个值不是p,抛 OperationError异常

d)令plaintext是从paddedPlaintext的末端删除p个字节的结果。 e)返回与全局对象this[HTML]相关的新的ArrayBufferJCT2092-2011 顶进施工法用钢筒混凝土管.pdf,包含了plaintext。

d)令plaintext是从paddedPlaintext的末端删除p个字节的结果。 e)返回与全局对象this[HTML相关的新的ArrayBuffer,包含了plaintext

©版权声明
相关文章