【关键字】
convertKey函数 / SM2 / textDecoder.decodeWithStream() 方法 / SM4密钥
【问题描述】
问题一:
使用 convertKey() 方法对指定的数据进行 SM2 非对称密钥生成,需要满足“ASN.1语法、X.509规范、DER编码格式”,有没有官方库可以提供转换方法,将字符串转换成上述编码格式?
问题二:
使用真机时,利用 textDecoder.decodeWithStream() 方法转换SM4密钥为字符串时,打印出的密钥字符串为乱码,是否正常?
问题三:
没有用真机,使用 Previewer 模拟调试时,打印出的 result 变量为空字符串。用SM2算法加密数据时,使用 cryptoFramework.createCipher 方法创建实例,catch 报错:TypeError:Constructor is false。 是否跟未使用真机调试有关?
【解决方案】
问题一:
当前暂无可将字符串转换为符合convertKey函数入参规范的库方法,业务可以根据自己不同的需求自行转换。
import buffer from '@ohos.buffer';
str->Uint8Array: new Uint8Array(buffer.from(str).buffer)
Uint8Array->str: buffer.from(uint8.buffer).toString()
问题二:
是正常的,使用SymKeyGenerator.generateSymKey()生成密钥时底层原理是使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥,会随机生成字节数组,textDecoder.decodeWithStream方法是将字节数组转换成UTF-8编码的字符串,所以打印出的字符串为乱码。
问题三:
textDecoder.decodeWithStream输出为空,根因是Previewer不支持SymKeyGenerator.generateSymKey()函数,返回的密钥数组为空。
catch 报错:TypeError:Constructor is false,因为Previewer模拟调试不支持相关API。
具体预览器支持的API清单请参考: