HarmonyOS 鸿蒙Next eftool-加密组件-SM4Sync
HarmonyOS 鸿蒙Next eftool-加密组件-SM4Sync
<markdown _ngcontent-kwd-c237="" class="markdownPreContainer">
大家好,本人是oh三方库eftool的作者,针对于最初开始的SM4而言,均采用async/await 方法来操作,广大开发者提问最多的就是可不可以是同步操作,在API12中官方也是听劝的均新增了同步操作,故eftool也紧跟其后,接下来我们进入到eftool的同步加密组件SM4Sync的使用
本示例使用eftool版本为API12的1.2.1-rc.2版本
首选需要引入SM4Sync
import {
SM4Sync
} from '[@yunkss](/user/yunkss)/eftool'
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
使用
SM4Sync提供了更加灵活的操作方式 针对于生成秘钥方法,可以传入期望生成秘钥的类型,不传默认生成为base64格式,支持传入basea64/hex 针对于加密后的输出字符串 也支持传入输出字符串类型,支持传入basea64/hex 针对于解密传入的key同样支持传入utf8/base64/hex格式的,其中utf8指的是普通字符串
generateSM4Key 生成秘钥
let key = SM4Sync.generateSM4Key();
this.message = key.getDataRow();
生成的返回对象为eftool中的OutDTO对象,key.getDataRow()获取生成的SM4秘钥,此时生成的秘钥为base64格式的
let keyHex = SM4Sync.generateSM4Key(‘hex’);
此时生成的秘钥为hex格式
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
IV的生成
如果需要在鸿蒙端生成iv,eftool也提供了灵活的生成方式
let iv = RandomUtil.generateIV('utf8');
此时生成的为普通字符串格式的iv
let ivHex = RandomUtil.generateIV('hex');
此时生成的为hex格式的iv
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
encodeECB 加密
let ecbEncode = SM4Sync.encodeECB('测试SM4-ECB加密~',keyHex.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,ecbEncode.getDataRow()获取加密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let ecbEncodeHex = SM4Sync.encodeECB(‘测试SM4-ECB加密~’,keyHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key的格式为hex,期望加密后的输出格式为hex,支持hex/base64
let ecbEncodeBase64 = SM4Sync.encodeECB(‘测试SM4-ECB加密~’,keyHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key的格式为hex,期望加密后的输出格式不传默认为base64,支持hex/base64
let encode1 = SM4Sync.encodeECB(‘测试SM4外部传入key加密~~~~’,‘4eS1Q15z1@TFTe%eEf23fGFZf)2Rs588’, ‘utf8’);
此时’utf8’表示传入秘钥key的格式为普通字符串utf8格式,期望加密后的输出格式不传默认为base64,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeECB 解密
let ecbDecode = SM4Sync.decodeECB(ecbEncode.getDataRow(),keyHex.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,ecbDecode.getDataRow()获取解密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let ecbDecodeHex = SM4Sync.decodeECB(ecbEncodeHex.getDataRow(),keyHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key的格式为hex,待解密字符串格式为hex,支持hex/base64
let ecbDecodBase64 = SM4Sync.decodeECB(ecbEncodeBase64.getDataRow(),keyHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key的格式为hex,待解密字符串格式不传默认为base64,支持hex/base64
let decode1 = SM4Sync.decodeECB(encode1.getDataRow(), ‘4eS1Q15z1@TFTe%eEf23fGFZf)2Rs588’, ‘utf8’);
此时’utf8’表示传入秘钥key的格式为普通字符串utf8,待解密字符串格式不传默认为base64,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
encodeCBC 加密
let encode = SM4Sync.encodeCBC('测试SM4-CBC加密~~~~', key.getDataRow(), iv.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,通过encode.getDataRow()获取加密后的内容,此处的base64表示传入key和iv的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let encodeHex = SM4Sync.encodeCBC(‘测试SM4-CBC加密~~~~’,keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key和iv的格式为hex,期望加密后的输出格式为hex,支持hex/base64
let encodeBase64 = SM4Sync.encodeCBC(‘测试SM4-CBC加密~~~~’,keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key和iv的格式为hex,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64
let encode2 = SM4Sync.encodeCBC(“测试SM4外部传入key/iv加密~~~”, “TESTsdiloia20230ass3[2K8%fw68sw7”,“ass3[2K8%fw68sw7”, ‘utf8’);
此时’utf8’表示传入秘钥key和iv的格式为普通字符串utf8,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeCBC 解密
let decode = SM4Sync.decodeCBC(encode.getDataRow(), key.getDataRow(), iv.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,通过decode.getDataRow()获取解密后的内容,此处的base64表示传入key和iv的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decodeHex = SM4Sync.decodeCBC(encodeHex.getDataRow(),keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key和iv的格式为hex,待解密字符串格式为hex,支持hex/base64
let decodeBase64 = SM4Sync.decodeCBC(encodeBase64.getDataRow(), keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key和iv的格式为hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decode2 = SM4Sync.decodeCBC(encode2.getDataRow(), “TESTsdiloia20230ass3[2K8%fw68sw7”, “ass3[2K8%fw68sw7”, ‘utf8’);
此时’utf8’表示传入秘钥key和iv的格式为普通字符串utf8,待解密的结果不传格式此时默认为base64格式,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
通过本章内容,我们已经学会了SM4Sync的各种加解密
如果大家有新的需求,欢迎给eftool提出issueissue提交地址
</markdown>HarmonyOS(鸿蒙)中的eftool-加密组件-SM4Sync
是指基于国密算法SM4的同步加密模块。SM4是一种对称加密算法,广泛用于需要高安全性的数据保护场景。在HarmonyOS开发中,如果涉及到对数据的加密保护,可以使用SM4Sync组件来实现数据的加密与解密。
确保你已经正确引入了相关的加密库,并在项目中配置了相应的加密参数(如密钥、模式等)。如果在使用SM4Sync组件时遇到问题,请检查密钥的正确性、加密模式的选择是否符合预期,以及是否有足够的权限进行加密操作。如果问题依旧没法解决请加我微信,我的微信是itying888。