JavaScript:使用openpgp.js解密GnuPG加密文件的内容
JavaScript: Decrypt content of GnuPG encrypted files using openpgp.js
我正在尝试使用openpgp.js.为JavaScript中的GnuPG加密文件编写一个示例解密器
所以我天真地尝试了一下,甚至没有问它是否可能。我做了下一页。
popup.html
<!doctype html>
<!--
-->
<html>
<head>
<title>Popup</title>
<script src="openpgp.js"></script>
<script src="popup.js"></script>
</head>
<body>
<p>Upload message: </p><input id="message" type="file"/><br>
<p>Upload secret key: </p><input id="secret" type="file"/><br>
<p>Secret key password: </p><input id="password" type="password"/><br><br>
<button id="decrypt">Decrypt</button>
<p id="output"></p>
<div id="loadingDiv"></div>
</body>
</html>
popup.js
var message = "";
var secret = "";
function readMessage (e) {
var file = e.target.files[0];
if (!file) {
message = "";
}
var reader = new FileReader();
reader.onload = function (e) {
message = e.target.result;
};
reader.readAsText (file);
}
function readSecret (e) {
var file = e.target.files[0];
if (!file) {
secret = "";
}
var reader = new FileReader();
reader.onload = function (e) {
secret = e.target.result;
};
reader.readAsText (file);
}
function loadScript(url, callback)
{
var head = document.getElementsByTagName ("head")[0];
var script = document.createElement ("script");
script.type = "text/javascript";
script.src = url;
script.onreadystatechange = callback;
script.onload = callback;
head.appendChild(script);
}
document.addEventListener ("DOMContentLoaded", function() {
document.getElementById ("message").addEventListener("change", readMessage, false);
document.getElementById ("secret").addEventListener("change", readSecret, false);
var gen = function() {
document.getElementById ("decrypt").addEventListener ("click", function() {
var output = document.getElementById ("output");
output.style.color = "black";
if (document.getElementById ("message").value == "") {
output.innerHTML = "No message provided";
output.style.color = "red";
}
else if (document.getElementById ("secret").value == "") {
output.innerHTML = "No secret key provided";
output.style.color = "red";
}
else if (document.getElementById ("password").value == "") {
output.innerHTML = "No password for secret key provided";
output.style.color = "red";
}
else {
var privateKey = openpgp.key.readArmored (secret).keys[0];
var isCorrect = privateKey.decrypt (document.getElementById ("password").value);
if (isCorrect) {
output.innerHTML = "";
output.style.color = "black";
var img = document.createElement ("img");
img.src = "loading.gif";
img.id = "loading";
document.getElementById ("loadingDiv").appendChild (img);
message = openpgp.message.readArmored (message);
openpgp.decryptMessage (privateKey, message).then (function (plaintext) {
output.innerHTML = plaintext;
}).catch (function(error) {
output.innerHTML = "Error while decrypting";
output.style.color = "red";
});
}
else {
output.innerHTML = "Incorrect password";
output.style.color = "red";
}
}
});
}
loadScript ("openpgp.js", gen);
});
openpgp.js在message = openpgp.message.readArmored (message);
上给出一个Unknown ASCII armor type
错误。
那么这有可能吗?如果是,我应该做一些不同的事情吗?
OpenPGP知道消息的编码,
- 二进制消息,更节省空间
- ASCII铠装消息以类似base64的格式编码,当以纯文本形式通过不同通道传输时,提供更高的可靠性
openpgp.message.readArmored (message)
只理解ASCII装甲信息。请改用openpgp.message.fromBinary (message)
。作为替代方案,在加密时使用--armor
选项通过GnuPG对消息进行编码,或者使用gpg --enarmor
对已经加密的二进制消息进行编码。
使用Openpgpjs 3.x版本,我发现必须创建一个私钥对象,并与选项变量中的publicKey和message一起使用。私钥对象是用私钥创建的。首先创建私钥对象,然后使用"秘密"短语对其进行解密,然后解密消息。
下面是一个使用变量的示例。
privKeyObj.decrypt(secret).then(function(oBoolean) {
//Name oBoolean anything you want.
//It will be true or false indicating
//whether the secret phrase is right.
if(!oBoolean) {
output.innerHTML = "Incorrect password.";
output.style.color = "red";
}
else {
var privateKey = "your openpgpjs private key created with your secret phrase";
var privKeyObj = openpgp.key.readArmored(privateKey).keys[0];
var options = {
message: openpgp.message.readArmored(message),
publicKeys: openpgp.key.readArmored(publickey).keys,
privateKeys: [privKeyObj]
};
openpgp.decrypt(options).then(function(plaintext) {
output.innerHTML = plaintext.data;
}, function(error) {
output.innerHTML = "Error while decrypting";
output.style.color = "red";
});
}
});
相关文章:
- 客户端PGP文件加密
- 用javascript(Phonegap应用程序)加密文件
- SJCL加密导致文件大小错误
- 加密-js - 读取和解密文件
- 节点.js使用 AES 加密大文件
- 使用SJCL客户端加密文件
- 如何从我的web应用程序中的Java脚本文件中获得加密的密码
- CryptoJS解密C#DES加密文件失败
- JavaScript:使用openpgp.js解密GnuPG加密文件的内容
- 使用HTML5文件API存储/检索文件中的加密文本
- 使用JavaScript解码PKCS12文件并从中获得加密私钥的最佳方法
- 我可以加密一个javascript文件,仍然让它在客户端上运行吗?
- 自动下载加密文件
- 我应该如何使用客户端JavaScript加密大文件
- 加密的Flash容器文件中的内容比普通的HTML/Javascript更安全吗?
- Javascript加密文件上传
- 客户端(javascript)文件上传加密
- 从javascript访问IndexedDB作为文件进行加密
- 使用node.js通过HTTP将文件加密为字符串
- 如何加密文件下载路径