【HarmonyOS NEXT】SM2加密问题

文章讨论了SM2加密中的种子值配置问题,指出SM2的c1c3c2是标准格式不可配置。Java实现中,鸿蒙的OpenSSL不支持CBC-MAC和填充算法,推荐使用SM4进行加密解密操作,示例代码展示了SM4的使用方法。
摘要由CSDN通过智能技术生成

 【关键字】

TextInput / 监听键盘事件 / 软键盘输入

【问题描述】

问题一:

SM2是默认c1c3c2的吗?还是有配置可以设置?

问题二:

java SM2 在构造ECDomainParameters时,会传入seed参数

定义byte数组,byte[] seed = "1234poiutyr".getBytes();

ECDomainParameters domainParameters = new ECDomainParameters(ecp.getCurve(), ecp.getG(), ecp.getN(), ecp.getH(), seed);

ECKeyGenerationParameters keyGenerationParameters = new ECKeyGenerationParameters(domainParameters, new SecureRandom());

ECKeyPairGenerator generator = new ECKeyPairGenerator();

generator.init(keyGenerationParameters);

Demo如上,SM2之前的项目创建domain时,是有设置byte[] seed,这个是有地方可以设置的吗?

【解决方案】

问题一:

c1c3c2是标准格式,不可配置。

问题二:

ArkTS无法设置seed。鸿蒙当前加解密算法库封装的OpenSSL OpenSSL不支持mac算法(CBC-MAC)和填充算法。

如果需要使用填充算法可以使用SM4加解密:

async function SM4ED(plainText: string) {

let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128');
let cipher = cryptoFramework.createCipher("SM4_128|CBC|NoPadding");
let decoder = cryptoFramework.createCipher("SM4_128|CBC|NoPadding");
let input: cryptoFramework.DataBlob = { data: stringToUint8Array(plainText) };
let keydata: cryptoFramework.DataBlob = { data: stringToUint8Array('yc1436w86vhys51r') }; //密钥
let ivdata: cryptoFramework.DataBlob = { data: stringToUint8Array('43pr5253zf5mm7jd') }; //偏移
let iv: cryptoFramework.IvParamsSpec = { iv: ivdata, algName: 'IvParamsSpec' } //cbc模式的参数
let key: cryptoFramework.SymKey
try {
key = await sm4Generator.convertKey(keydata);
// 加密
// 最后一个参数是偏移量的设置,如果没有则为null,下面解密同理
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, iv);
let cipherData = await cipher.doFinal(input)
//解密
await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, key, iv);
let result = await decoder.doFinal(cipherData);
//解密后的明文
let str = uint8ArrayToString(result.data)
AlertDialog.show({ message: "decrypt success ==>" + str })
} catch (err) {
console.error(err)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值