未验证 提交 f21af50b 编写于 作者: scrawman's avatar scrawman 提交者: Gitee

update zh-cn/device-dev/subsystems/subsys-security-huks-guide.md.

Signed-off-by: scrawman's avatarzqr2001 <1805768383@qq.com>
上级 19155000
...@@ -832,192 +832,178 @@ JS测试代码示例如下: ...@@ -832,192 +832,178 @@ JS测试代码示例如下:
**AES生成密钥和加密** **AES生成密钥和加密**
1. 设定密钥操作的参数 1. 引入HUKS模块,设定密钥操作的参数
```js ```js
import huks from '@ohos.security.huks'; import huks from '@ohos.security.huks';
export default { let handle;
data: {}, let IV = '0000000000000000';
onInit() { let cipherInData = 'Hks_AES_Cipher_Test_101010101010101010110_string';
console.log(`huks demo cipher_aes init finish`); let srcKeyAlias = 'huksCipherAesSrcKeyAlias';
}, let encryptUpdateResult = new Array()
onShow() { let decryptUpdateResult = new Array()
console.log(`huks demo cipher_aes onshow start`); let properties = new Array();
this.start(); properties[0] = {
console.log(`huks demo cipher_aes onshow end`); tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
}, value: huks.HuksKeyAlg.HUKS_ALG_AES,
async start() { }
let handle; properties[1] = {
let IV = '0000000000000000'; tag: huks.HuksTag.HUKS_TAG_PURPOSE,
let cipherInData = 'Hks_AES_Cipher_Test_101010101010101010110_string'; value:
let srcKeyAlias = 'huksCipherAesSrcKeyAlias'; huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT |
let encryptUpdateResult = new Array() huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT,
let decryptUpdateResult = new Array() }
let properties = new Array(); properties[2] = {
tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
/* 集成生成密钥参数集 & 加密参数集 */ value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128,
properties[0] = { }
tag: huks.HuksTag.HUKS_TAG_ALGORITHM, properties[3] = {
value: huks.HuksKeyAlg.HUKS_ALG_AES, tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
} value: huks.HuksCipherMode.HUKS_MODE_CBC,
properties[1] = { }
tag: huks.HuksTag.HUKS_TAG_PURPOSE, properties[4] = {
value: tag: huks.HuksTag.HUKS_TAG_PADDING,
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | value: huks.HuksKeyPadding.HUKS_PADDING_NONE,
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT, }
}
properties[2] = {
tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128,
}
properties[3] = {
tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
value: huks.HuksCipherMode.HUKS_MODE_CBC,
}
properties[4] = {
tag: huks.HuksTag.HUKS_TAG_PADDING,
value: huks.HuksKeyPadding.HUKS_PADDING_NONE,
}
let HuksOptions = { let HuksOptions = {
properties: properties, properties: properties,
inData: new Uint8Array(new Array()) inData: new Uint8Array(new Array())
} }
``` ```
2. 生成密钥并执行加密操作 2. 生成密钥并执行加密操作
```js ```js
/* 生成密钥 */ /* 生成密钥 */
await huks.generateKey(srcKeyAlias, HuksOptions).then((data) => { await huks.generateKey(srcKeyAlias, HuksOptions).then((data) => {
console.log(`test generateKey data: ${JSON.stringify(data)}`); console.log(`test generateKey data: ${JSON.stringify(data)}`);
}).catch((err) => { }).catch((err) => {
console.log('test generateKey err information: ' + JSON.stringify(err)); console.log('test generateKey err information: ' + JSON.stringify(err));
}); });
/* 构造加密参数 */ /* 构造加密参数 */
let propertiesEncrypt = new Array(); let propertiesEncrypt = new Array();
propertiesEncrypt[0] = { propertiesEncrypt[0] = {
tag: huks.HuksTag.HUKS_TAG_ALGORITHM, tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
value: huks.HuksKeyAlg.HUKS_ALG_AES, value: huks.HuksKeyAlg.HUKS_ALG_AES,
} }
propertiesEncrypt[1] = { propertiesEncrypt[1] = {
tag: huks.HuksTag.HUKS_TAG_PURPOSE, tag: huks.HuksTag.HUKS_TAG_PURPOSE,
value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT,
} }
propertiesEncrypt[2] = { propertiesEncrypt[2] = {
tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128,
} }
propertiesEncrypt[3] = { propertiesEncrypt[3] = {
tag: huks.HuksTag.HUKS_TAG_PADDING, tag: huks.HuksTag.HUKS_TAG_PADDING,
value: huks.HuksKeyPadding.HUKS_PADDING_NONE, value: huks.HuksKeyPadding.HUKS_PADDING_NONE,
} }
propertiesEncrypt[4] = { propertiesEncrypt[4] = {
tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
value: huks.HuksCipherMode.HUKS_MODE_CBC, value: huks.HuksCipherMode.HUKS_MODE_CBC,
} }
propertiesEncrypt[5] = { propertiesEncrypt[5] = {
tag: huks.HuksTag.HUKS_TAG_DIGEST, tag: huks.HuksTag.HUKS_TAG_DIGEST,
value: huks.HuksKeyDigest.HUKS_DIGEST_NONE, value: huks.HuksKeyDigest.HUKS_DIGEST_NONE,
} }
propertiesEncrypt[6] = { propertiesEncrypt[6] = {
tag: huks.HuksTag.HUKS_TAG_IV, tag: huks.HuksTag.HUKS_TAG_IV,
value: this.stringToUint8Array(IV) value: this.stringToUint8Array(IV)
} }
let encryptOptions = { let encryptOptions = {
properties: propertiesEncrypt, properties: propertiesEncrypt,
inData: new Uint8Array(new Array()) inData: new Uint8Array(new Array())
} }
/* 进行密钥加密操作 */ /* 进行密钥加密操作 */
await huks.init(srcKeyAlias, encryptOptions).then((data) => { await huks.init(srcKeyAlias, encryptOptions).then((data) => {
console.log(`test init data: ${JSON.stringify(data)}`); console.log(`test init data: ${JSON.stringify(data)}`);
handle = data.handle; handle = data.handle;
}).catch((err) => { }).catch((err) => {
console.log('test init err information: ' + JSON.stringify(err)); console.log('test init err information: ' + JSON.stringify(err));
}); });
encryptOptions.inData = this.stringToUint8Array(cipherInData) encryptOptions.inData = this.stringToUint8Array(cipherInData)
await huks.update(handle, encryptOptions).then(async (data) => { await huks.update(handle, encryptOptions).then(async (data) => {
console.log(`test update data ${JSON.stringify(data)}`); console.log(`test update data ${JSON.stringify(data)}`);
encryptUpdateResult = Array.from(data.outData); encryptUpdateResult = Array.from(data.outData);
}).catch((err) => { }).catch((err) => {
console.log('test update err information: ' + err); console.log('test update err information: ' + err);
}); });
encryptOptions.inData = new Uint8Array(new Array()); encryptOptions.inData = new Uint8Array(new Array());
await huks.finish(handle, encryptOptions).then((data) => { await huks.finish(handle, encryptOptions).then((data) => {
console.log(`test finish data: ${JSON.stringify(data)}`); console.log(`test finish data: ${JSON.stringify(data)}`);
let finishData = this.uint8ArrayToString(new Uint8Array(encryptUpdateResult)); let finishData = this.uint8ArrayToString(new Uint8Array(encryptUpdateResult));
if (finishData === cipherInData) { if (finishData === cipherInData) {
console.log('test finish encrypt err '); console.log('test finish encrypt err ');
} else { } else {
console.log('test finish encrypt success'); console.log('test finish encrypt success');
} }
}).catch((err) => { }).catch((err) => {
console.log('test finish err information: ' + JSON.stringify(err)); console.log('test finish err information: ' + JSON.stringify(err));
}); });
``` ```
3. 执行解密操作并删除密钥 3. 执行解密操作并删除密钥
```js ```js
/* 修改加密参数集为解密参数集 */ /* 修改加密参数集为解密参数集 */
propertiesEncrypt.splice(1, 1, { propertiesEncrypt.splice(1, 1, {
tag: huks.HuksTag.HUKS_TAG_PURPOSE, tag: huks.HuksTag.HUKS_TAG_PURPOSE,
value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT,
}); });
let decryptOptions = { let decryptOptions = {
properties: propertiesEncrypt, properties: propertiesEncrypt,
inData: new Uint8Array(new Array()) inData: new Uint8Array(new Array())
} }
/* 进行解密操作 */ /* 进行解密操作 */
await huks.init(srcKeyAlias, decryptOptions).then((data) => { await huks.init(srcKeyAlias, decryptOptions).then((data) => {
console.log(`test init data: ${JSON.stringify(data)}`); console.log(`test init data: ${JSON.stringify(data)}`);
handle = data.handle; handle = data.handle;
}).catch((err) => { }).catch((err) => {
console.log('test init err information: ' + JSON.stringify(err)); console.log('test init err information: ' + JSON.stringify(err));
}); });
decryptOptions.inData = new Uint8Array(encryptUpdateResult); decryptOptions.inData = new Uint8Array(encryptUpdateResult);
await huks.update(handle, decryptOptions).then(async (data) => { await huks.update(handle, decryptOptions).then(async (data) => {
console.log(`test update data ${JSON.stringify(data)}`); console.log(`test update data ${JSON.stringify(data)}`);
decryptUpdateResult = Array.from(data.outData); decryptUpdateResult = Array.from(data.outData);
}).catch((err) => { }).catch((err) => {
console.log('test update err information: ' + err); console.log('test update err information: ' + err);
}); });
decryptOptions.inData = new Uint8Array(new Array()); decryptOptions.inData = new Uint8Array(new Array());
await huks.finish(handle, decryptOptions).then((data) => { await huks.finish(handle, decryptOptions).then((data) => {
console.log(`test finish data: ${JSON.stringify(data)}`); console.log(`test finish data: ${JSON.stringify(data)}`);
let finishData = this.uint8ArrayToString(new Uint8Array(decryptUpdateResult)); let finishData = this.uint8ArrayToString(new Uint8Array(decryptUpdateResult));
if (finishData === cipherInData) { if (finishData === cipherInData) {
console.log('test finish decrypt success '); console.log('test finish decrypt success ');
} else { } else {
console.log('test finish decrypt err'); console.log('test finish decrypt err');
} }
}).catch((err) => { }).catch((err) => {
console.log('test finish err information: ' + JSON.stringify(err)); console.log('test finish err information: ' + JSON.stringify(err));
}); });
//删除密钥 //删除密钥
await huks.deleteKey(srcKeyAlias, HuksOptions).then((data) => { await huks.deleteKey(srcKeyAlias, HuksOptions).then((data) => {
console.log(`test deleteKey data: ${JSON.stringify(data)}`); console.log(`test deleteKey data: ${JSON.stringify(data)}`);
}).catch((err) => { }).catch((err) => {
console.log('test deleteKey err information: ' + JSON.stringify(err)); console.log('test deleteKey err information: ' + JSON.stringify(err));
}); });
}, },
stringToUint8Array(str) { stringToUint8Array(str) {
var arr = []; var arr = [];
for (var i = 0, j = str.length; i < j; ++i) { for (var i = 0, j = str.length; i < j; ++i) {
arr.push(str.charCodeAt(i)); arr.push(str.charCodeAt(i));
} }
return new Uint8Array(arr); return new Uint8Array(arr);
}, },
uint8ArrayToString(fileData) { uint8ArrayToString(fileData) {
var dataString = ''; var dataString = '';
for (var i = 0; i < fileData.length; i++) { for (var i = 0; i < fileData.length; i++) {
dataString += String.fromCharCode(fileData[i]); dataString += String.fromCharCode(fileData[i]);
}
return dataString;
} }
return dataString;
} }
``` ```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册