HarmonyOS 鸿蒙Next @ohos/node-polyfill crypto加密报错

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next @ohos/node-polyfill crypto加密报错

你好,node项目crypto迁移鸿蒙,使用@ohos/node-polyfill crypto,代码没有改动,在弄得项目中运行正常,在鸿蒙上报错。请问需要哪些改动? 代码如下:

import Buffer from '[@ohos](/user/ohos).buffer';
import { crypto } from '[@ohos](/user/ohos)/node-polyfill';

const de = (str: any) => {
    return Buffer.from(
        Buffer.from(str, 'hex')
            .toString()
            .split('')
            .map(val => val.charCodeAt(0))
            .map(val => String.fromCharCode(val - 6))
            .join(''),
        'hex'
    );
};

export function getDCSecurityKey() {
    return de('\u0033\u0062\u0033\u0037\u0033\u0039\u0033\u0036\u0033\u0039\u0033\u0063\u0033\u0061\u0033\u0065\u0033\u0062\u0033\u0062\u0033\u0039\u0033\u0062\u0033\u0063\u0033\u0038\u0033\u0063\u0036\u0061\u0033\u0039\u0033\u0061\u0033\u0063\u0036\u0063\u0033\u0064\u0033\u0064\u0033\u0061\u0033\u0037\u0033\u0063\u0033\u0062\u0033\u0061\u0033\u0061\u0033\u0063\u0033\u0039\u0033\u0061\u0033\u0065')
        .toString();
}

export function getDBSecurityKey() {
    return Buffer.from(getDCSecurityKey());
}

export function simpleChiper(data: any, key = getDCSecurityKey(), algorithm = 'aes-128-cbc') {
    let chunk = Buffer.alloc(0);
    console.log('---------111111111111111------------', chunk);

    let cip = crypto.createCipheriv(algorithm, key, Buffer.alloc(16, 0x00));
    console.log('---------222222222222222------------', cip);

    cip.setAutoPadding(false);
    console.log('---------333333333333333------------', cip);

    data = Buffer.concat([
        Buffer.from(data),
        Buffer.alloc(16 - Buffer.from(data).length % 16, 0x00)
    ]);
    console.log('---------444444444444444------------', data);

    const updateData = cip.update(data, 'binary');
    console.log('---------555555555555555------------', updateData);

    chunk = Buffer.concat([chunk, cip.update(data, 'binary')]);
    console.log('---------666666666666666------------');

    chunk = Buffer.concat([chunk, cip.final()]);
    console.log('---------777777777777777------------');

    return chunk;
}

更多关于HarmonyOS 鸿蒙Next @ohos/node-polyfill crypto加密报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

根据您提供的代码,可以新建Test.js文件,内容如下:

import { buffer } from '@ohos/node-polyfill';

export function getDCSecurityKey() {

  return de('\u0033\u0062\u0033\u0037\u0033\u0039\u0033\u0036\u0033\u0039\u0033\u0063\u0033\u0061\u0033\u0065\u0033\u0062\u0033\u0062\u0033\u0039\u0033\u0062\u0033\u0063\u0033\u0038\u0033\u0063\u0036\u0061\u0033\u0039\u0033\u0061\u0033\u0063\u0036\u0063\u0033\u0064\u0033\u0064\u0033\u0061\u0033\u0037\u0033\u0063\u0033\u0062\u0033\u0061\u0033\u0061\u0033\u0063\u0033\u0039\u0033\u0061\u0033\u0065')

    .toString()

}

export function getDBSecurityKey() {

  return buffer.Buffer.from(getDCSecurityKey())

}

export function de(str) {

  return buffer.Buffer.from(buffer.Buffer.from(str, 'hex')

    .toString()

    .split('')

    .map(val => {

      return val.charCodeAt(0)

    })

    .map(val => {

      return String.fromCharCode(val - 6)

    })

    .join(''), 'hex')

}

然后编写在鸿蒙代码中引用js文件中的方法:

import { buffer, crypto } from '@ohos/node-polyfill';

import { getDBSecurityKey } from './test';

@Entry

@Component

struct Index {

  @State message: string = 'Hello World';

  simpleChiper(data: ESObject, key: string, algorithm = 'aes-128-cbc'): ESObject {

    let chunk: ESObject = buffer.Buffer.alloc(0)

    console.log('---------111111111111111------------', chunk)

    let cip: ESObject = crypto.createCipheriv(algorithm, key, buffer.Buffer.alloc(16, 0x00));

    console.log('---------222222222222222------------', cip)

    cip.setAutoPadding(false)

    console.log('---------333333333333333------------', cip)

    data = buffer.Buffer.concat([buffer.Buffer.from(data),

      buffer.Buffer.alloc(16 - buffer.Buffer.from(data).length % 16, 0x00)])

    console.log('---------444444444444444------------', data)

    const updateData: ESObject = cip.update(data, 'binary')

    console.log('---------555555555555555------------', updateData)

    chunk = buffer.Buffer.concat([chunk, cip.update(data, 'binary')])

    console.log('---------666666666666666------------')

    chunk = buffer.Buffer.concat([chunk, cip.final()])

    console.log('---------777777777777777------------')

    return chunk

  }

  build() {

    Column() {

      Button('点击').onClick(() => {

        let res = this.simpleChiper('1223', getDBSecurityKey()) as string

        AlertDialog.show({ message: `执行结果为:${res}` })

      })

    }

    .width("100%")

    .height("100%")

    .justifyContent(FlexAlign.Center)

  }

}

更多关于HarmonyOS 鸿蒙Next @ohos/node-polyfill crypto加密报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的HarmonyOS鸿蒙Next中@ohos/node-polyfillcrypto加密报错问题,这通常可能由于以下几个原因:

  1. API兼容性问题:确保您使用的@ohos/node-polyfill版本与您的HarmonyOS版本兼容。不同版本的操作系统可能支持不同的API集。

  2. 依赖缺失:检查是否所有必要的依赖都已正确安装。在鸿蒙系统中,某些Node.js的polyfill可能不完全支持所有标准库功能。

  3. 实现差异crypto模块在标准Node.js环境与鸿蒙的polyfill环境中可能存在实现差异。查阅HarmonyOS的官方文档,了解crypto模块的具体实现和支持范围。

  4. 错误的使用方式:检查您的代码是否正确使用了crypto模块。错误的API调用或参数可能导致运行时错误。

  5. 系统限制:鸿蒙系统可能对某些加密操作有特定的安全限制或要求。确保您的应用满足这些要求。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在这里,您可以获得更专业的技术支持和解决方案。

回到顶部