- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个名为 test() 的示例虚拟代码,我运行了 100K 次,我得到了相同纯文本的不同加密消息(显然,我得到的解密是原始纯文本)。
我猜这背后的原因是为了避免频率;但是为什么一次解密可以有多次加密呢?不应该一对一吗?
public static void test()
{
String plainMessage = "I'm gonna bid 100 USD on this project";
String password = "A99922000001000004581F0F0CCD0000";
Set<String> set = new HashSet<String>();
for (int x=0; x<100000; x++)
{
String enc = AESEncryption.encryptMessage(plainMessage, password);
System.out.println(enc);
set.add(enc);
String dec = AESEncryption.decryptMessage(enc, password);
if (!dec.equals(plainMessage))
{
System.out.println("wrong decryption"); //never gets here
break;
}
}
System.out.println(">"+set.size()); //just to make sure they are all unique
}
加密
public static String encryptMessage(final String plainMessage, final String symKeyHex)
{
final byte[] symKeyData = DatatypeConverter.parseHexBinary(symKeyHex);
final byte[] encodedMessage = plainMessage.getBytes(Charset.forName("UTF-8"));
try {
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
final int blockSize = cipher.getBlockSize();
// create the key
final SecretKeySpec symKey = new SecretKeySpec(symKeyData, "AES");
// generate random IV using block size (possibly create a method for
// this)
final byte[] ivData = new byte[blockSize];
final SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG");
rnd.nextBytes(ivData);
final IvParameterSpec iv = new IvParameterSpec(ivData);
cipher.init(Cipher.ENCRYPT_MODE, symKey, iv);
final byte[] encryptedMessage = cipher.doFinal(encodedMessage);
// concatenate IV and encrypted message
final byte[] ivAndEncryptedMessage = new byte[ivData.length + encryptedMessage.length];
System.arraycopy(ivData, 0, ivAndEncryptedMessage, 0, blockSize);
System.arraycopy(encryptedMessage, 0, ivAndEncryptedMessage, blockSize, encryptedMessage.length);
final String ivAndEncryptedMessageBase64 = DatatypeConverter.printBase64Binary(ivAndEncryptedMessage);
return ivAndEncryptedMessageBase64;
}catch (InvalidKeyException e)
{
throw new IllegalArgumentException("key argument does not contain a valid AES key");
}catch (GeneralSecurityException e)
{
throw new IllegalStateException("Unexpected exception during encryption", e);
}
}
最佳答案
为注释添加一些清晰度:
iv 或 initialization vector 就像一个第二个 key ,用于加密 数据。
由于您每次都使用随机 iv(这很好),因此您每次都会得到不同的加密文本。这第二个 key 实际上包含在加密文本 中,因此您不需要单独传递它。
只有 iv 并不能使您破解加密(这就是为什么您可以将它与加密文本 一起传递的原因),但通过使用它,您可以多次发送具有相同密码的相同纯文本(使用不同的ivs)并得到完全不同的结果加密值。
关于java - 是什么让AES with Base64对同一个明文产生不同的加密结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701068/
我正在使用 将文本显示在屏幕上 text.setText(text.getText().toString()+"binary message sent: "+ msg + "\n"); 如何从屏幕上删
我正在编写一个程序来 ping 服务器并返回一个值。 我一直在尝试将 ping 覆盖到 JFrame,其中 JLabel 在透明窗口中显示 ping。 但是,每次我调用方法 DrawOverlay()
我正在尝试从 JTextPane 中删除所有文本。我以为你可以简单地使用: textPane.setText(""); 这确实有效,但由于某种原因,调用该方法后总是有一个空行。为什么会这样?我该如何预
更新到新发布的 Xcode 7 版本后,我遇到了这个问题。 应用程序传输安全性已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用程序的 Info.plist 文件配置临时异
我试图在单击单选按钮时清除简单文本框中的文本。这是我的 CoffeeScript ... $("#selection_single").click -> $("#from_date_tex
复制代码 代码如下: Set Shell = CreateObject("WScript.Shell") Shell.Run "cmd /c @runas /use
TortoiseSVN 需要打开哪些端口进行身份验证(基本)才能提交?我知道这不是一件好事,但我相信用户名和密码现在是清楚的。 让我尽可能多地描述一下我所知道的设置以及似乎正在发生的情况。 我是一名承
我正在使用速度模板为通知系统生成纯文本电子邮件。我有一个“收件人”POJO 列表,其中包含用户 ID 和电子邮件地址。我想迭代这些 POJO 并在一行中输出用户 ID(最终用逗号等分隔符分隔)。我在格
我正在尝试围绕 CNG 的 AES 实现 AES-OFB 包装器以进行对称加密。 我遇到了一个我无法理解的问题...我创建了一个 AES 算法句柄 (BCRYPT_AES_ALGORITHM) 并导入
dat.gui.js 我尝试使用DAT.GUI.js中的文本输入,当我单击输入框时,如果有默认值,文本输入框应该是清晰的。完成后,会弹出一个确认框(Message Box),告知用户输入的消息。 现在
我正在使用原生脚本的 angular 版本并尝试为我的网络创建登录系统。 下面是我尝试登录网络的代码。 home.component.ts import { LoginService } from
我有一个从 Nib 加载的屏幕外 UITextView 实例,当用户点击“评论”按钮时,它会移动到屏幕框架中。输入使用的任何文本都是不可见的。如果用户旋转设备,文本就会出现。 我试过设置 setNee
我正在尝试使用 pyaes 进行 AES 加密。 我的下面的代码运行完美。 text = 'Hello world !!!!' encrypter = pyaes.AESModeOfOperation
我在 Stack Overflow 中看到了很多答案,解释了我们如何通过监听 keydown 事件并将焦点重定向到位于屏幕外的文本区域来删除文本粘贴的格式。这个解决方案很好,但没有解决使用上下文菜单或
正如标题所说。使用 iPhone SDK,我想使用服务器提供的现有 key 和指数对一些(小)明文进行 RSA 加密以进行身份验证。这肯定是一项简单的任务,需要一个库导入和几行代码?如果没有,为什
我是一名优秀的程序员,十分优秀!