- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Java AES 加密来加密将发送给收件人的数据。每个收件人都有自己的 key ,他们和我都知道。
他们的想法是,他们可以使用免费的 AES 解密工具来解密数据。
这是我的代码:
public class AESencrypt {
private static final String ALGO = "AES/CBC/PKCS5Padding";
private static final byte[] keyValue = new byte[]{'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'};
private static byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
public void String encryptToFile(String filename, String data) throws Exception {
Key key = new SecretKeySpec(keyValue, "AES");
Cipher c = Cipher.getInstance(ALGO);
IvParameterSpec ivspec = new IvParameterSpec(iv);
c.init(Cipher.ENCRYPT_MODE, key, ivspec);
byte[] encVal = c.doFinal(data.getBytes());
FileOutputStream fileOutputStream = new FileOutputStream(filename);
fileOutputStream.write(encVal);
fileOutputStream.close();
}
public static void main(String[] args) throws Exception {
encryptToFile("foo.aes", "hellothere");
}
}
}
为了验证这一点,我使用了 Online AES Encryption / Decryption Tool解密一些示例数据(效果很好!)。
现在,我想使用免费的 AES 解密工具,以便接收者无需使用在线工具即可解密其 PC 上的数据 - 这就是挫败感开始的地方。
我开始安装和测试各种不同的 AES 解密工具:我小心地输入 key ,选择 CBC 算法,选择我的文件并点击“解密”,但没有一个工具可以解码我的示例文件 foo .aes
- 它们都因错误而失败,并且在一种情况下给出了零字节的空文件。
我尝试了至少 4 个不同的 AES 加密器/解密器工具,但没有一个能够解密我的文件,这让我相信我的代码可能存在问题。
如果有人可以查看我的代码,我将不胜感激。
或者,可能有一个 AES 解密工具可以与上面的代码一起使用。
最佳答案
您面临的问题是,虽然 AES 是一个标准,但它只是一个加密原语,您需要一个完整的协议(protocol)。
您提出的协议(protocol)的工作原理基本上如下:
如您所见,为了成功通信,双方都必须了解几个预定义的详细信息,而 AES 只是其中之一。您尝试过的工具显然在所有这些细节上都不一致。
解决方案当然是使用标准协议(protocol)。
要选择合适的协议(protocol),您必须首先确定为什么需要加密,因为加密本身并不是理想的目标。您想防范什么?
本质上,加密是用少量数据( key )的 secret 性替代大量数据的 secret 性。如果用户错误地泄露了 key 会发生什么?如果您可以安全地将 key 发送给用户,为什么不能也通过该 channel 发送其余数据? (有关该主题的文章:http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx)
认识到 secret 性只是众多安全属性之一也很重要。您的协议(protocol)无法提供真实性(保证您创建了消息并且它没有被修改),因为 CBC 具有相当的延展性,并且它可能会泄漏有关明文的信息,因为您使用了静态 IV .
如您所见,设计安全协议(protocol)绝非易事。即使是你的决定中最微小的细节,你也必须了解。即使是专家也不一定总是正确的。
为了避免所有麻烦,最好的选择是使用完善的标准。使用TLS用于通过网络连接传输数据,以及 PGP用于加密磁盘上的数据。这两种协议(protocol)都可以针对几乎任何用例进行配置。
关于Java AES加密: need files to decrypt properly in freely available decryptor tools,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19517916/
我已经在 nodejs 中重新实现了这个 AES c++ 解密。 “缓冲区”包含加密内容。“decryptKey”包含解密“缓冲区”的 key 。“expectedOutput”包含预期的输出。 为了
我正在尝试解密从后端服务器接收到的字符串 "~9?8?m???=?T?G",该服务器使用 OpenSSL 加密字符串,使用AES-256-CBC。有代码块: public static String
输入图像是被分解为64像素块的灰度图像,加密函数采用64像素(512位)作为输入值和64位密钥。我们将INPUT_VALUE分成8个像素值的块。我们对一组8个像素进行16轮加密。其他每个函数都进行一些
输入图像是被分解为64像素块的灰度图像,加密函数采用64像素(512位)作为输入值和64位密钥。我们将INPUT_VALUE分成8个像素值的块。我们对一组8个像素进行16轮加密。其他每个函数都进行一些
目前我正在使用 PyPDF 2,我也尝试将 PyPDF 4 作为依赖项。 我遇到了一些加密文件并像往常一样处理它们(在以下代码中): import PyPDF2 import PyPDF4 pdfFi
我需要解密 JavaScript 中的十六进制消息,其结果与用 Java 编写的代码完全相同。然而,使用 CryptoJs 的 Javascript 版本返回一个空结果 Java中的代码: priva
我正在设计一个使用加密的匿名聊天网站。我应该在客户端解密消息还是在服务器端解密消息?哪种方法更安全?我使用Node.js + Socket.io来开发聊天系统。 例如: 用户A加密消息,将加密消息发送
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: How come MD5 hash values are not reversible? 我正在阅读一个关于 MD5
因此,我使用以下代码成功将密码加密为密码哈希: class PassHash { // blowfish private static $algo = '$2a'; // co
我不确定,但我认为我的问题是我的函数没有比较字符的正确性。我使用 Switch 也是对的吗? 我的输入 x 是一个字符串,当 x = "aaaaa"时它返回 "aaaaa"而不是 "zzzzz"。 S
我很难逆转这个算法: decrypt_algorithm = function (text) { var parser = new TextParser(text); var decrypt_
我正在编写一个程序,它接受来自控制台的输入 - 一个 zip 文件的名称,一个包含从第一个 zip 生成的(de/en)加密文件的 zip 文件的名称和一个包含公钥。解密时出现异常: exceptio
我正在使用回溯来打印应用程序的堆栈跟踪,我得到类似的东西 libQtCore.so.4(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x843) [0x7f
为什么 Pycrypto AES 解密在使用用于加密的 AES 对象解密时给出不同的输出,而在使用仅用于解密的 AES 对象解密时给出正确的输出? from Crypto.Cipher import
在以下代码中:symmetryCryptoKey 表示应始终受到保护的私有(private)信息,因为它是加密对称 key 的解密版本。 问题: 是否可以进行其他增强来保护 Multi-Tenancy
我正在开展一个项目,部分要求: 添加一个复选框菜单项 Decrypt,可以选中该选项进行解密,也可以取消选中该选项进行加密。该项目应与 GUI 中的切换按钮相关联。两者都应反射(reflect)应用程
我在 ColdFusion 中有一个函数可以加密和解密密码。我需要有人查看该函数并指出我或给我写一个 c# 等效项。一个项目尽快需要它,所以如果你能帮忙的话,我可以通过 paypal 给你一些现金。
我目前正在编写一个非常小的Java程序来实现一次性pad,其中pad(或 key )本身是使用SecureRandom对象生成为一系列字节的,该对象使用一个简单的字符串进行播种SHA-512 算法。
这是我在运行编码和解码类时遇到的错误。 javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPa
我正在尝试在我的客户端和服务器之间实现基于 RSA 的加密通信。为此,我通过以下方式使用 openssl 生成了 RSA 公钥和私钥: openssl genrsa -out private.pem
我是一名优秀的程序员,十分优秀!