【关键字】
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)
}