HarmonyOS AES/ECB/PKCs5Padding工具类代码翻译

HarmonyOS
2024-12-25 09:44:55
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

AES加解密的请参考

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-aes-sym-encrypt-decrypt-ecb-V5

请参考以下示例:

import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
import { BusinessError } from '@kit.BasicServicesKit';
import { util } from '@kit.ArkTS';

function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) {
  let cipher = cryptoFramework.createCipher('AES256|ECB|PKCS5');
  cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
  let cipherData = cipher.doFinalSync(plainText);
  return cipherData;
}
// 解密消息
function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
  let decoder = cryptoFramework.createCipher('AES256|ECB|PKCS5');
  decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null);
  let decryptData = decoder.doFinalSync(cipherText);
  return decryptData;
}
export class AES {
  static async main(pubKeyStr:string,message:string) {
    try {
      // let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]);
      /*let keyData = new Uint8Array(buffer.from(pubKeyStr, 'utf-8').buffer);
      let symKeyBlob: cryptoFramework.DataBlob = { data: keyData };*/
      let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
      let key = await symKeyGenerator.convertKey({ data:new Uint8Array(buffer.from(pubKeyStr).buffer) });
      // let key = await symKeyGenerator.convertKey(symKeyBlob);
      let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
      let encryptText = encryptMessage(key, plainText);
      let decryptText = decryptMessage(key, 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');
      }
    } catch (error) {
      console.error(`AES ECB “${error}“, error code: ${error.code}`);
    }
  }
}
@Entry
@Component
struct AESTest1 {
  @State message: string = 'Hello World';

  async aboutToAppear(){
    let pubKeyStr="U0Xg55zo9-TglUjxvBG_Dac_2NAsAyQc"
    AES.main(pubKeyStr,"This is a message")
  }

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('AESTest1HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(async ()=>{
          let pubKeyStr="U0Xg55zo9-TglUjxvBG_Dac_2NAsAyQc"
          let encryptTextStr = "Py0Hz54GLZT6EyRb1hmOXguLnv6r9vYHpOialJ2ErtARIynKWOii+VR8t3w/PrlXcGAg3Q22mBVw626/q4TCBfJixxxxxxxxxxxxxxxxxxxxxxxMU/hNEEv+A0F3bKSrcIBVu6oHzDwX88yi85L7VnBiraj9TdOs3zoVVXAirduEAcqa7Z8dDKJI8hVFUEoSjzfxcAgSHz7hURAWmZNBkRsIO/3gfHPZFQNuUwJVwwI51iSTP8AP2lsjSyqqA9XJHtfR4SskJlE9Cvj2OdW0qDIWy37DuK+gEIUFceyiJPYidwKaj7edsdav3aDpcF1sdB/6oq4A5blF+wILlWziKrHcy9w0emogPH26VxxxxxxxxxxxxxxxxxxxOCysIXTDWr/S19qnFsY0Sct+3M7G5yXazbxWhR0WHDiLi/QUXL0KrCRbQHdAvD/u0/BtNbB5mYNLMXRHc5RxgM/wvLRHgQCFCa16+cl8/fNwT5BsYZHF47A1VeqmYKU/VfItBVFtLrHuCarfONhHiaUxkKN2US+8E2JbQ0c0bSPgMn2T3n6jbC/AklDc7myN62GREAnuqJ5ZgKWrW5qn3fJ4R7q5P66sAY0vr8cRApUn6SdgTYbZKHMn4v983vCffHwO0Fo4JVw01fvT7oTS/2DaekHRpMTsc6FZJ12IuA9MzV8kyIi7azA7bTFobJv2EUd1hGDvvxxxxxxxxxxxxxxxxxxxxxxxxxxxfhi517k/K7z2FlX4lGD8CZBGU8+T+HpXXTd4JjoyhQRdir+gHU332N87yIzm/ClYqcrxli4McuCoH5jiXAQrACIK0QBBQS8YAR8Ft+82MrcLgo9d/gb4Cbh1bcGeHTgvB1guLEDr64ko4zmDf9YwyoFDV19X3xZBjW9M9O6K1k0qgTbJ1cWdH04ozOfsRcUYCdqJDWhu45H8AXOUyAraMBI7daNl2fu+X5p17pX/3WisLvjxLmqVsw+aSsTW7fPLnwXqIHOc3auGLlevNk75bEWB8BDmLwA/A9XsW+2HzFmsO5hQ7Pxxxxxxxxxxxxxxxxxxxxxxxxxxx6gmjahztJMRRT9W/QVhtP7b3FOKLJh6qCpCeKo8CMfleKPYBg1coA/XRzqScg5si91IYacV9zpPhgkZH18E8cRTl5kfsrg8FUKbfPGkiMfpe/QG3mFSpXWgXpcL4fvZK7DJwDVTDHKKkIpox2pUUa/oEhePs0REhIULaf/7OHVIEqM6dG7kWQ25gV9jBfOHQayVBqv+KaKxIZN6gPcFxJqNqjI6RVPnNGpUi5Ixm+EoyVYIOEikutYhen7ep7zkuN4FdFq/gCbr+vUEoUE49AjyjTouUegHUFM8W4pXUkwvP3W8+X5B0SMNxe2O7W2smcYVvFV19SZa0Tf7aMgKdZMBp/Dc0yW3FUZZyAz3PbFhplCMpwOpkN9MRrZl59QxLLhSRy+svUMGxp8qb3yEMUSNs+mP2nnEQXi5Q52Vj/6k7VjC/f8pZ+9zFCw0kMpS77sFCnxNbxFoT+2vkAbGcHhqpiO9PkhoIalNWK8b8ZADDmdxYV5gfoH1JuncE8CVPW4LCu2nW3HbVhR7Bw/8emT1JrgcLAwbvUXJHxMIytO1+pdwCthxKbq+vDYDbkNXwPClDKAuoG+IWoYpWJYm1FSegDLUEpKmA3OTZNcQ+v24W6NysHFGxKUnTLcdJQBdq0zziXs8oUk6boHAx/ten+a/Dz9gDis9RVMUF7XYAW8twgWRtEkIJhc36K7L/uxw6Zx2ZSy4sN5wsizhMnw3QQY+G+BGpOosJzl9ML7MSaaKCOPwS/L5/nClpZRoLz7ATWl5pT7DMXYEtWr4pRo81qKWlK1FAQPiczv0Xn+qycEBh9LXZ2JqehJXgk=";
          let encryptText = new util.Base64Helper().decodeSync(encryptTextStr)
          try {
            let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
            let key = await symKeyGenerator.convertKey({ data:new Uint8Array(buffer.from(pubKeyStr).buffer) });
            // let key = await symKeyGenerator.convertKey(symKeyBlob);
            let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("message", 'utf-8').buffer) };
            // let encryptText = encryptMessage(key, plainText);
            let decryptText = decryptMessage(key, {data: encryptText});
            console.error('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8'));

            /*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');
            }*/
          } catch (error) {
            console.error(`AES ECB “${error}“, error code: ${error.code}`);
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}
分享
微博
QQ
微信
回复
2024-12-25 11:09:23
相关问题
HarmonyOS 加解密方式 AES/ECB/PKCS5Padding
180浏览 • 1回复 待解决
HarmonyOS AES/ECB/PKCS7Padding 加解密
127浏览 • 1回复 待解决
HarmonyOS sm4 支持 CBC PKCS5Padding
134浏览 • 1回复 待解决
HarmonyOS AES ECB加密后后台解析失败
204浏览 • 1回复 待解决
如何使用AES ECB 加密方式?
357浏览 • 1回复 待解决
是否有AESECB模式的加密算法
766浏览 • 1回复 待解决
preferences工具封装
1461浏览 • 1回复 待解决
HarmonyOS color argb工具问题
503浏览 • 1回复 待解决
HarmonyOS有mimeType的工具吗?
499浏览 • 1回复 待解决
HarmonyOS 开发中需要的工具
508浏览 • 1回复 待解决
鸿蒙-有没有缓存工具
6136浏览 • 1回复 待解决