SM4的相关demo如下:import cryptoFramework from '@ohos.security.cryptoFramework'; import buffer from '@ohos.buffer'; // 加密消息 async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { let cipher = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); let encryptData = await cipher.doFinal(plainText); return encryptData; } // 解密消息 async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); let decryptData = await decoder.doFinal(cipherText); return decryptData; } async function genSymKeyByData(symKeyData: Uint8Array) { let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); let symKey = await symGenerator.convertKey(symKeyBlob); console.info('convertKey success'); return symKey; } async function main() { //服务器传入的密钥 let keyData = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMTW+419MhK4O1IjKxpG4JCouhIpgplQjYHPQ5VzA......Dxiz23k21Zs="; // 先对密钥进行base64解码,获取密钥Uint8Array对象 let base64 = new util.Base64Helper(); let keyDatabase64 = base64.decodeSync(keyData); // 密钥Uint8Array 生成密钥 let symKey = await genSymKeyByData(keyDatabase64); // 此处为明文 let message = "This is a test"; // 把明文字符串按utf-8解码为Uint8Array let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; // 加密消息 let encryptText = await encryptMessagePromise(symKey, plainText); // 解密消息 let decryptText = await decryptMessagePromise(symKey, encryptText); if (plainText.data.toString() === decryptText.data.toString()) { console.info('decrypt ok'); console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); } else { console.error('decrypt failed'); } } import cryptoFramework from '@ohos.security.cryptoFramework'; import buffer from '@ohos.buffer'; // 加密消息 async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { let cipher = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); let encryptData = await cipher.doFinal(plainText); return encryptData; } // 解密消息 async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); let decryptData = await decoder.doFinal(cipherText); return decryptData; } async function genSymKeyByData(symKeyData: Uint8Array) { let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); let symKey = await symGenerator.convertKey(symKeyBlob); console.info('convertKey success'); return symKey; } async function main() { //服务器传入的密钥 let keyData = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMTW+419MhK4O1IjKxpG4JCouhIpgplQjYHPQ5VzA......Dxiz23k21Zs="; // 先对密钥进行base64解码,获取密钥Uint8Array对象 let base64 = new util.Base64Helper(); let keyDatabase64 = base64.decodeSync(keyData); // 密钥Uint8Array 生成密钥 let symKey = await genSymKeyByData(keyDatabase64); // 此处为明文 let message = "This is a test"; // 把明文字符串按utf-8解码为Uint8Array let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; // 加密消息 let encryptText = await encryptMessagePromise(symKey, plainText); // 解密消息 let decryptText = await decryptMessagePromise(symKey, encryptText); if (plainText.data.toString() === decryptText.data.toString()) { console.info('decrypt ok'); console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); } else { console.error('decrypt failed'); } }相关SM4参考指南:【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-sm4-sym-encrypt-decrypt-ecb-V5 】相关随机生成SM4参考指南: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-generate-sym-key-randomly-V5\#随机生成sm4密钥 】相关SM4规格参考指南: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-encrypt-decrypt-spec-V5\#sm4 】
SM4的相关demo如下:
相关SM4参考指南:【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-sm4-sym-encrypt-decrypt-ecb-V5 】
相关随机生成SM4参考指南: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-generate-sym-key-randomly-V5\#随机生成sm4密钥 】
相关SM4规格参考指南: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/crypto-sym-encrypt-decrypt-spec-V5\#sm4 】