Advertisement

山东大学软件学院项目实训-创新实训-SDUMeeting(九)

阅读量:

山东大学软件学院项目实训-创新实训-SDUMeeting(九)中采用Electron中的safestorage模块实现本地聊天记录的安全存储功能。该模块通过简单的加密和解密字符串保护磁盘上存储的数据不被其他应用程序或拥有完全磁盘访问权的用户访问。具体实现包括:获取最新的密码并解密(通过ipc.handle('GETLASTPASSWORD')实现),对过往历史记录进行加密(通过ipc.handle('SETMESSAGEHISTORY')实现)以及对加密后的消息进行解密(通过ipc.handle('GETMESSAGEHISTORY')实现)。此外还涉及文件操作以确保数据安全存储在指定路径下(如path.join(EXEPATH, '/data/messages/${userEmail}.smm)`)。

山东大学软件系部开展项目实践创新训练活动

本地聊天记录安全存储

通过调用Electron中的safestORAGE组件实现本地数据加密。该组件负责对关键信息执行基本的加密与解密操作。这些操作完成后会将敏感数据以安全格式存放在本地设备中。该模块旨在防止任何未授权的应用程序或拥有完整文件系统权限的用户访问敏感数据。

复制代码
    const {
    	app,
    	BrowserWindow,
    	Tray,
    	Menu,
    	screen,
    	nativeImage,
    	safeStorage,
    	dialog,
    	shell,
    } = require('electron');

获取最新的密码进行解密

复制代码
    ipc.handle('GET_LAST_PASSWORD', () => {
    			let userPsw;
    			if (store.get('userSafePsw')) {
    				userPsw = safeStorage.decryptString(Buffer.from(store.get('userSafePsw').data));
    			}
    			return userPsw;
    		});

加密

复制代码
    ipc.once('SAFE_PASSWORD', (event, shouldSave, userPsw) => {
    			if (shouldSave) {
    				store.set('userSafePsw', safeStorage.encryptString(userPsw));
    			} else {
    				store.clear('userSafePsw');
    			}
    		});

对过往历史记录进行加密

复制代码
    ipc.handle('SET_MESSAGE_HISTORY', (evt, messages) => {
    			fs.ensureDir(path.join(EXEPATH, '/data/messages')).then(() => {
    				fs.outputFile(
    					path.join(EXEPATH, `/data/messages/${userEmail}.smm`),
    					safeStorage.encryptString(JSON.stringify(messages)),
    					(err) => {
    						if (err) {
    							console.log('write error');
    							console.log(err);
    						}
    					}
    				);
    			});
    		});

对过往历史记录进行解密

复制代码
    ipc.handle('GET_MESSAGE_HISTORY', () => {
    			return new Promise((resolve) => {
    				fs.ensureDir(path.join(EXEPATH, '/data/messages'))
    					.then(() => {
    						return fs.ensureFile(path.join(EXEPATH, `/data/messages/${userEmail}.smm`));
    					})
    					.then(() => {
    						fs.readFile(
    							path.join(EXEPATH, `/data/messages/${userEmail}.smm`),
    							(err, data) => {
    								if (err) {
    									console.log('read error');
    									console.log(err);
    								} else {
    									let messages;
    									if (data) {
    										messages = safeStorage.decryptString(data);
    									}
    									messages = messages || '{}';
    									resolve(messages);
    								}
    							}
    						);
    					});
    			});
    		});

全部评论 (0)

还没有任何评论哟~