我正在尝试读取二进制文件,以对其进行加密/解密和保存/写入。 将原始文件与解密的结果文件进行比较会导致相同的文件哈希。所以我认为这是一种正确/可行的方法。
如果我尝试在Windows中使用GnuPG手动解密文件,则表明已验证文件但未保存任何可用文件。所以我的问题是:我该如何存储也可以“手动”使用的文件。
我的代码基于以下帖子: https://commscentral.net/tech/?post=64
-> example code of post on GitHub
但是我读过有关处理二进制文件/有效载荷的内容:
openpgp.message.fromBinary()
应该被使用。 -> https://github.com/openpgpjs/openpgpjs/issues/204#issuecomment-43065260
const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
const writeFile = util.promisify(fs.writeFile);
const openpgp = require('openpgp') // use as CommonJS, AMD, ES6 module or via window.openpgp
const encryptFuntion = async() => {
openpgp.initWorker({ path:'openpgp.worker.js' }) // set the relative web worker path
const pubkey = await readFile('pub.asc','utf8');
const passphrase = `password`;
const privkey = await readFile('priv.asc','utf8');
const privKeyObj = (await openpgp.key.readArmored(privkey)).keys[0];
await privKeyObj.decrypt(passphrase);
const file = await readFile('test.txt');
const fileArray = new Uint8Array(file);
const options = {
message: openpgp.message.fromBinary(fileArray),
publicKeys: (await openpgp.key.readArmored(pubkey)).keys,
privateKeys: [privKeyObj],
armor:false
};
const encryptionResponse = await openpgp.encrypt(options);
const encryptedFile = encryptionResponse.message.packets.write();
await writeFile('test.txt.gpg',encryptedFile);
};
const decryptFuntion = async () => {
openpgp.initWorker({path: 'openpgp.worker.js'}) // set the relative web worker path
const passphrase = `password`;
const privkey = await readFile('priv.asc', 'utf8');
const pubkey = await readFile('pub.asc', 'utf8');
const privKeyObj = (await openpgp.key.readArmored(privkey)).keys[0];
await privKeyObj.decrypt(passphrase);
const file = await readFile('test.txt.gpg');
const fileArray = new Uint8Array(file);
options = {
message: await openpgp.message.read(file), // parse encrypted bytes
privateKeys: [privKeyObj], // decrypt with password
publicKeys: (await openpgp.key.readArmored(pubkey)).keys,
format: 'binary' // output as Uint8Array
};
const decryptionResponse = await openpgp.decrypt(options);
const decryptedFile = decryptionResponse.data;
await writeFile('test-decrypted.txt', decryptedFile);
};
答案 0 :(得分:0)
希望这会有所帮助,并根据我对NodeJS的了解对代码进行了一些更改。
{% else %}
我可能会在文件内容类型上出错,将使用fs.readFile
链接指的是: 1. Async waterfall 2. Openpgp 3. Node FS Module
PS:通过在stackoverflow上重新编写代码,这是我每周学习新知识的方式。