【HarmonyOS NEXT】FAQ之系统开发(安全-加解密算法1)

1、CryptoFramework是否支持“RSA ECB pkcs1padding”加密模式

A:支持该加密模式,HarmonyOS分组模式默认是ECB。

PKCS1:即RFC3447规范中的RSAES-PKCS1-V1_5模式,对应OpenSSL中的RSA_PKCS1_PADDING。

2、如何获取应用签名证书的hash值

A:如下

  • “应用指纹”signatureInfo.fingerprint是应用签名证书(.cer文件)的SHA-256hash值,当前支持获取本应用的“应用指纹”。

  • 对于hash值,可使用加解密框架的hash算法,目前支持SHA1、SHA224、SHA256、SHA384、SHA512、MD5。

3、如何使用国密SM2算法进行加解密

A:加解密如下

加密

  1. 生成ECC密钥(公钥)。

当前SM2密钥生成的参数只支持封装并ASN.1序列化后的数据(公钥91字节,私钥51字节),而很多开发者使用的密钥数据是未封装序列化过的原始裸数据(公钥64字节,私钥32字节)。当前ECC密钥的生成是支持未封装序列化过的原始裸数据作为参数的,可以先使用原始密钥数据生成ECC密钥作为中间对象,然后将ECC密钥的数据作为参数来生成SM2密钥。

  1. 生成SM2密钥对象。

完成ECC的密钥对象创建后,下一步就是将ECC的密钥数据传入convertKey中来生成SM2密钥对象。

  1. 使用裸密钥执行SM2加密。

得到SM2密钥后,就可以使用cryptoFramework创建的cipher,执行SM2算法加密。

  1. 业务层封装调用,执行加密。

其中pubKey是未封装序列化过的原始裸数据公钥。最终返回的是标准SM2密文数据,符合ASN.1编码标准(base64编码)。

解密

  1. 将SM2裸密文数据转为标准的ASN.1序列化格式。

部分开发者的云端使用的密文格式为未封装序列化的裸数据,所以需要先根据SM2国标说明,编写代码,将裸密文数据转化为ASN.1序列化格式。

  1. 生成ECC密钥(私钥)。

与加密过程的生成ECC公钥类似,先使用原始私钥数据生成ECC加密的私钥;其中genSM2CommonSpec与加密时的方法相同。

  1. 生成SM2密钥对象。

与加密过程相同,使用genSM2Key方法,将ECC的私钥数据传入convertKey中来生成SM2密钥对象。

  1. 使用裸密钥执行SM2解密。

得到SM2密钥后,就可以使用cryptoFramework创建的cipher,执行SM2算法解密。

  1. 业务层封装调用,执行解密。

如下所示,如果需要解密裸密文,执行decryptSM2Array;如果待解密的是base64编码的符合ASN.1序列化的密文,则执行decryptSM2方法。其中priKey是未封装序列化过的原始裸数据私钥。最终返回解密后的字符串。

4、ECC算法是否支持secp256r1

A:ECC算法支持secp256r1,ECC256生成的就是secp256r1。

5、sm2公钥私对的getEncode().data返回的二进制数据是什么格式的

A:返回的是pkcs#8格式的私钥。

6、是否有AES的ECB模式的加密算法

A:有AES的ECB模式的加密算法,详情请参见:AES的ECB模式的加密算法

7、是否支持sm3算法

A:从API version 10开始, 支持sm3算法。参考链接:消息摘要计算

8、如何使用Native计算MD5

A:HarmonyOS中有提供摘要算法,可参考消息摘要计算

9、如何对大文件进行SM4加密

A:使用分段加解密,对于ECB和CBC模式,不论update传入的数据是否为分组长度的整数倍,都会以分组作为基本单位进行加/解密,并输出本次update新产生的加/解密分组结果。update只要凑满一个新的分组就会有输出,如果没有凑满则此次update输出为null,把当前还没被加/解密的数据留着,等下一次update/doFinal传入数据的时候,拼接起来继续凑分组。最后doFinal的时候,会把剩下的还没加/解密的数据,根据createCipher时设置的padding模式进行填充,补齐到分组的整数倍长度,再输出剩余加解密结果。

10、AES的CBC加密,报错401

用AES256|CBC|PKCS5加密,在symKeyGenerator.convertKey时,报401参数错误,无法生成symKey

A:密钥是base64格式,转换时要用 const decryptKeyUint8Array = base.decodeSync(key);

11、如何实现RSA的公钥PK加密一段文字

A:算法库目前提供了RSA加解密常用的三种模式:NoPadding、PKCS1、PKCS1_OAEP。不同RSA密钥规格和不同填充方式支持加密的数据长度不同,详情见参考链接。

12、如何解决AES解密失败

使用cryptoFramework进行AES解密时,报错"doFinal failed"。

A:由于三方库版本问题,需要把根目录下oh-package.json5文件中 "@ohos/crypto-js"的版本号修改为 "2.0.3"。

更多详情查看:文档中心

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值