HarmonyOS鸿蒙Next中实现数据DLP加密示例代码
HarmonyOS鸿蒙Next中实现数据DLP加密示例代码
介绍
数据防泄漏服务(Data Loss Prevention,简称为DLP),是系统提供的系统级的数据防泄漏解决方案,提供文件权限管理、加密存储、授权访问等能力,数据所有者可以基于账号认证对机密文件进行权限配置,允许拥有只读、编辑、拥有者权限,随后机密文件会通过密文存储,在支持DLP机制的设备上可以通过端云协调进行认证授权,获取对数据的访问和修改的能力。
本示例演示了如何创建、编辑一个dlp文件。
使用说明
- 进入应用会看到两个按钮,根据文字提示点击第一个按钮可创建一个test.txt文件保存到本地,保存位置可选择。
- 点击第二个按钮,选择刚创建的test.txt文件,会显示已选择文件的信息,点击“生成dlp文件”按钮,可生成dlp文件。
- 再次点击第二个按钮,选择生成的txt.dlp文件,会直接打开该文件。
实现思路
创建test.txt文件并保存
使用@ohos.file.picker接口实现test.txt文件的创建和保存,使用@ohos.file.fs接口以同步方法打开创建的test.txt文件并写入数据。核心代码如下,源码参考
Index.ets
async saveFile () {
let uri = ''
try {
let DocumentSaveOptions = new picker.DocumentSaveOptions();
DocumentSaveOptions.newFileNames = ['test.txt'];
let documentPicker = new picker.DocumentViewPicker();
await documentPicker.save(DocumentSaveOptions).then((DocumentSaveResult: Array<string>) => {
console.info(TAG, 'DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult));
uri = DocumentSaveResult[0]
return uri
}).catch((err: BusinessError) => {
console.error(TAG, 'DocumentViewPicker.save failed with err: ' + JSON.stringify(err));
return uri
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(TAG, 'DocumentViewPicker failed with err: ' + JSON.stringify(err));
return uri
}
return uri
}
writeText (filePath: string) {
if (!filePath) {
return
}
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let str: string = "hello, world";
let writeLen = fs.writeSync(file.fd, str);
console.info(TAG, "write data to file succeed and size is:" + writeLen);
fs.closeSync(file);
}
生成dlp文件
先利用@ohos.file.picker接口选择一个文件,再使用@ohos.dlpPermission接口根据文件的fd,查询该文件是否是dlp文件。如果该文件不是dlp文件,则通过@ohos.app.ability.Want接口传入txt文件的数据,生成对应的dlp文件;如果该文件是dlp文件,则直接打开文件。
核心代码如下,源码参考
Index.ets,dlpPage.ets
// 选择一个文件
async callFilePickerSelectFile () {
let DocumentSelectOptions = new picker.DocumentSelectOptions();
DocumentSelectOptions.maxSelectNumber = 20;
let documentPicker = new picker.DocumentViewPicker();
documentPicker.select( DocumentSelectOptions ).then( ( DocumentSelectResult ) => {
console.info( TAG , 'DocumentViewPicker.select successfully, DocumentSelectOptions : ' + JSON.stringify( DocumentSelectOptions ) );
console.info( TAG , 'DocumentViewPicker.select successfully, DocumentSelectResult uri: ' + JSON.stringify( DocumentSelectResult ) );
let editFlag = false;
if ( DocumentSelectResult !== null && DocumentSelectResult !== undefined ) {
DocumentSelectResult.forEach( ( value ) => {
this.uri = value;
editFlag = true;
console.info( TAG , `select file uri: ${ this.uri }` );
} )
}
if ( editFlag ) {
this.getFilenameByUri( this.uri );
}
} ).catch( ( err: BusinessError ) => {
console.error( TAG , 'DocumentViewPicker.select failed with err: ' + JSON.stringify( err ) );
} );
}
/**
* 是否为dlp文件
*/
async isDlpFileFunc ( fd: number ): Promise<boolean> {
try {
this.isDLPFile = await dlpPermission.isDLPFile(fd); // 是否加密DLP文件
console.info( TAG , 'isDlpFile:' + this.isDLPFile );
this.inSandbox = await dlpPermission.isInSandbox();
let msg = 'isDlpFile:' + true + ';inSandbox:' + this.inSandbox;
dlpPermission.getDLPPermissionInfo().then( ( data: dlpPermission.DLPPermissionInfo ) => {
console.info( TAG , 'getDLPPermissionInfo, result: ' + JSON.stringify( data ) );
promptAction.showToast( { message : msg + ' permission:' + JSON.stringify( data ) , duration : 2000 } );
} ).catch( ( err: BusinessError ) => {
console.info( TAG , 'getDLPPermissionInfo: ' + JSON.stringify( err ) );
} );
} catch(err) {
console.error( TAG , 'isDLPFile error:' + (err as BusinessError).code + (err as BusinessError).message );
}
return this.isDLPFile;
}
/**
* 生成dlp文件
*/
async onEncrypt() {
console.info( TAG + 'new file and encrypt' );
let context = getContext() as common.UIAbilityContext; // 获取当前UIAbilityContext
let want: Want = {
"action" : "ohos.want.action.editData" ,
"bundleName" : "com.ohos.dlpmanager" ,
"type" : "text/plain" ,
"abilityName" : "MainAbility" ,
"uri" : this.dlpUri ,
"parameters" : {
"displayName" : this.dlpName ,
"fileName" : { "name" : this.dlpName } ,
"linkFileName" : { "name" : this.dlpLinkName } ,
}
};
try {
console.info( TAG , "openDLPFile:" + JSON.stringify( want ) );
context.startAbility( want , ( error: BusinessError ) => {
console.error( TAG , 'want error.code =' + error.code + ',error.message =' + error.message );
} );
} catch(err) {
console.error( 'openDLPFile startAbility failed' + (err as BusinessError).code + (err as BusinessError).message );
return;
}
}
更多关于HarmonyOS鸿蒙Next中实现数据DLP加密示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
dlp使用有什么限制吗,这个demo一点生成dlp文件就提示 ‘当前无法操作,请稍后重试’
更多关于HarmonyOS鸿蒙Next中实现数据DLP加密示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,数据DLP(Data Loss Prevention)加密可以通过使用系统的安全框架来实现。以下是一个简单的示例代码,展示如何在应用中对数据进行加密存储。
import { dataProtection } from '@ohos.dataProtection';
// 初始化加密模块
let dataProtectionManager = dataProtection.getDataProtectionManager();
// 定义加密密钥
let keyAlias = 'my_secret_key';
let keyParams = {
alias: keyAlias,
purpose: dataProtection.Purpose.ENCRYPT_DECRYPT,
blockMode: dataProtection.BlockMode.CBC,
padding: dataProtection.Padding.PKCS7,
keySize: 256
};
// 生成加密密钥
dataProtectionManager.generateKey(keyParams).then(() => {
console.log('密钥生成成功');
}).catch((err) => {
console.error('密钥生成失败:', err);
});
// 加密数据
let plainText = 'This is a secret message';
dataProtectionManager.encrypt(keyAlias, plainText).then((encryptedData) => {
console.log('加密成功:', encryptedData);
}).catch((err) => {
console.error('加密失败:', err);
});
// 解密数据
dataProtectionManager.decrypt(keyAlias, encryptedData).then((decryptedData) => {
console.log('解密成功:', decryptedData);
}).catch((err) => {
console.error('解密失败:', err);
});
在这个示例中,首先通过dataProtection.getDataProtectionManager()
获取数据保护管理器的实例。然后定义了一个加密密钥的参数,包括别名、用途、块模式、填充方式和密钥大小。接着使用generateKey
方法生成密钥,并使用encrypt
方法对数据进行加密。最后,使用decrypt
方法对加密后的数据进行解密。
这个示例展示了如何在HarmonyOS鸿蒙Next中使用系统提供的API实现数据的加密和解密操作。
在HarmonyOS鸿蒙Next中实现数据DLP(数据丢失防护)加密,可以通过使用系统的加密API来实现。以下是一个简单的示例代码,展示如何使用cryptoFramework
模块进行数据加密:
import cryptoFramework from '@ohos.security.cryptoFramework';
async function encryptData(data: string, key: string): Promise<Uint8Array> {
// 创建对称密钥生成器
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
// 生成对称密钥
let symKey = await symKeyGenerator.convertKey(new Uint8Array(Buffer.from(key)));
// 创建加密器
let cipher = cryptoFramework.createCipher('AES256|ECB|PKCS7');
// 初始化加密器
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
// 加密数据
let encryptedData = await cipher.doFinal(new Uint8Array(Buffer.from(data)));
return encryptedData;
}
// 使用示例
let data = 'Sensitive Data';
let key = 'SecretKey123456789012345678901234';
encryptData(data, key).then(encrypted => {
console.log('Encrypted Data:', encrypted);
});
此代码使用AES256算法对数据进行加密,确保数据在传输或存储时的安全性。