HarmonyOS 鸿蒙Next @ohos/node-polyfill crypto加密报错
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
根据您提供的代码,可以新建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-polyfill
的crypto
加密报错问题,这通常可能由于以下几个原因:
-
API兼容性问题:确保您使用的
@ohos/node-polyfill
版本与您的HarmonyOS版本兼容。不同版本的操作系统可能支持不同的API集。 -
依赖缺失:检查是否所有必要的依赖都已正确安装。在鸿蒙系统中,某些Node.js的polyfill可能不完全支持所有标准库功能。
-
实现差异:
crypto
模块在标准Node.js环境与鸿蒙的polyfill环境中可能存在实现差异。查阅HarmonyOS的官方文档,了解crypto
模块的具体实现和支持范围。 -
错误的使用方式:检查您的代码是否正确使用了
crypto
模块。错误的API调用或参数可能导致运行时错误。 -
系统限制:鸿蒙系统可能对某些加密操作有特定的安全限制或要求。确保您的应用满足这些要求。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在这里,您可以获得更专业的技术支持和解决方案。