HarmonyOS鸿蒙Next中国密SM2加密,至少有10%概率加密出来的密文长度为单数,无法解密
HarmonyOS鸿蒙Next中国密SM2加密,至少有10%概率加密出来的密文长度为单数,无法解密 国密SM2加密,至少有10%概率加密出来的密文长度为单数,无法解密,Demo已上传
"这个是由于openssl底层返回的数据我们直接透传返回的,中间不作任何操作是为了防止数据在拼接的时候被截取到,保证安全性。openssl底层返回的数据规范是高位是0的情况下默认不显示,即在返回的时候需要业务实现下,x、y的长度是固定的64长度即32字节,判断是否满足进行首位高位补0即可 encSM2C1C2C3方法修改如下:
async encSM2C1C2C3(str: string, pubKeyStr = this.pubKeyStr) {
let pubKey = await this.convertStrToPubKey(pubKeyStr)
let res = await this.encryptMessagePromise(pubKey, str)
let spec: cryptoFramework.SM2CipherTextSpec = cryptoFramework.SM2CryptoUtil.getCipherTextSpec(res, 'C1C3C2')
let C1x = spec.xCoordinate.toString(16)
let C1y = spec.yCoordinate.toString(16)
if (C1x.length != 64) {
C1x = '0' + C1x
}
if (C1y.length != 64) {
C1y = '0' + C1y
}
let C2 = buffer.from(spec.cipherTextData).toString('hex')
let C3 = buffer.from(spec.hashData).toString('hex')
return '04' + C1x + C1y + C2 + C3
}
更多关于HarmonyOS鸿蒙Next中国密SM2加密,至少有10%概率加密出来的密文长度为单数,无法解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用中国密SM2加密时,密文长度通常为固定长度。SM2加密算法基于椭圆曲线密码学,生成的密文包含多个部分,如公钥、曲线参数、密文数据等,因此密文长度通常是偶数。如果出现密文长度为单数的情况,可能是由于以下原因:
-
数据填充问题:SM2加密过程中,如果输入数据未按照规范进行填充,可能导致密文长度异常。SM2要求明文数据在进行加密前进行特定填充,以确保数据长度符合要求。
-
编码问题:在加密过程中,如果密文数据在编码(如Base64、Hex等)时出现错误,可能导致密文长度异常。例如,Base64编码后的字符串长度通常为4的倍数,如果编码过程出现问题,可能导致长度不符合预期。
-
实现差异:不同平台或库对SM2加密的实现可能存在差异,某些实现可能未严格按照标准处理数据,导致密文长度异常。
-
硬件或内存问题:在加密过程中,如果硬件或内存出现异常,可能导致数据损坏,进而影响密文长度。
-
随机数生成问题:SM2加密过程中需要使用随机数,如果随机数生成器出现问题,可能导致加密结果异常,包括密文长度不符合预期。
如果遇到密文长度为单数且无法解密的情况,建议检查加密过程中的数据处理、编码以及随机数生成等环节,确保每个步骤符合SM2加密规范。
在HarmonyOS鸿蒙Next系统中,使用中国密SM2加密算法时,确实存在密文长度为单数的情况,这可能导致解密失败。建议在加密后添加填充机制或检查密文长度,确保其为偶数后再进行传输或存储。同时,开发者应关注官方文档和更新,以获取最新的安全补丁和优化方案。