- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Android 中加密图像。我将图像转换为字节数组。后来想用密文制作一个全新的位图保存。以下代码用于我的加密
private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
private static int KEY_LENGTH = 256;
...
public static byte[][] encrypt(byte[] plaintext, SecretKey key, byte[] salt) {
try {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
byte[] iv = generateIv(cipher.getBlockSize());
IvParameterSpec ivParams = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, ivParams);
byte[] cipherText = cipher.doFinal(plaintext);
return new byte[][]{salt, iv, cipherText};
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
}
问题是当函数返回时,cipherText 有额外的 16 个字节。
例如,明文的大小为 7680000 字节,而密文的大小为 7680016 字节。图像是 1600x1200,所以 1600x1200x4= 7680000。我无法将 7680016 字节保存为图像 :( 这些额外的 16 字节是什么?我做错了什么吗?
最佳答案
额外的 16 个字节几乎可以肯定是由于填充。填充使加密更加安全,但如果您不介意去掉它,您可以将密码名称的第三部分((代表填充算法)更改为 NoPadding
,以提供"AES/CBC/NoPadding"
的密码名称。
您可以找到有关加密算法名称如何工作的所有详细信息 in the Java security architecture docs .
然而,一般来说,您不应该真正依赖密码生成的输出大小——密码经过精心设计以尽可能安全,您应该将输出大小留给它们。
关于java - cipher.doFinal 额外字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663813/
我正在开发一个 Android 应用程序,我正在为其使用 Android 密码类解密一个大文件。 代码: private byte[] decrypt_chunk(byte[] data, ByteS
我正在尝试在 Android 中加密图像。我将图像转换为字节数组。后来想用密文制作一个全新的位图保存。以下代码用于我的加密 private static final String CIPHER_ALG
我正在使用 Java Cipher 和 AES 实现加密/解密。除了在调用 doFinal() 时多写了 5 个字节外,一切都运行良好。因此,我最终得到了一个正确解码的字符串,并附加了 5 个额外的字
这是我的完整代码: import static java.nio.file.StandardOpenOption.READ; import static java.nio.file.StandardO
问题可能很长,但我会尽量详细描述。 这是一个demo有像我这样的问题。 我有一个 android 应用程序,我想添加一个功能,允许用户在 SharedPreferences 中加密和保存他们的密码,并
有人知道 RxJava 2 中运算符“doAfterTerminate”和“doFinally”之间的区别吗? 最佳答案 不同之处在于,如果下游除了常规的 onError 或 取消/处置序列外,doF
我在 Java Card 上使用 DES 加密时遇到问题:我在发送数据之前加密数据,然后将其作为对来自某个库的请求的响应发送。 如果在一个小程序中 SELECT 发送信息请求,则通过卡上的 28-30
我有一些解密代码期望 Cipher.doFinal() 在使用不正确的 key /iv 时抛出异常。这似乎没有发生。好吧,它确实发生了,但并非总是如此。 我的加密使用当前时间的“秒”作为 Random
在java中,我们需要为太多的文本数据生成HmacSHA1/256消息摘要,当然还要并行。 现在的问题是,javax.crypto.Mac#doFinal(byte[]:arg) 是线程安全的,还是通
我正在尝试加密来自 glide 的输入流。 我将输入流转换为一个字节数组,并将其传递到我的加密方法中: fun encrypt(input: ByteArray): ByteArray { L
我遇到了一个问题,我的可观察对象在 IO 线程上订阅并在 android 主 (UI) 线程上观察,但 doFinally 运算符在 IO 线程上运行,它需要在 UI 线程上运行。 用例几乎和这个me
我正在尝试使用 RSA 算法加密和解密字符串。这里的加密工作正常,但问题出在解密上。 代码在到达 DECRYPT 方法中的 doFinal 时终止。我是输入错误还是公钥和私钥有问题?请给我一些建议。谢
我有一个使用 AES/CBC/PKCS5Padding 处于加密模式的 Cipher aesEncryptCipher。 为什么以下两个函数返回两个不同的东西? encrypt2的返回值是什么意思?根
我正在尝试创建一个程序,使用javax.crypto.Cipher API 检查数字签名。 只要 RSA key 正确配对,我的程序就可以正常工作。但是,当我尝试解密消息时使用不正确的 key 时,会
要求: 使用 AES 加密(使用 GCMParameterSpec 和 nonce)加密字符串。 将随机数附加到加密字符串以便稍后使用它进行解密。 通过提取随机数和要解密的字符串来解密字符串。 我已经
我想用 Java 进行 AES CBC 加密。我正在使用 javax.crypto。初始化 Cipher 后,我是否只需要对明文字节调用 doFinal 即可对其进行正确加密?或者我需要对更新做一些事
我正在研究加密和解密。我对密码学非常陌生,在使用充气城堡时遇到垫 block 损坏异常 这是我的加密/解密代码。 私有(private)AESFastEngine引擎; private Buffere
我有以下代码: KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(128); SecretKey mSecretKe
在我的项目中,我异或(抱歉,但不知道正确的动词)字符串并使用 RSA-1024 加密。现在我有了一个xored 和加密 字符串,例如: 994624f87a00f4c3066c2a2d38917fe4
我如何创建一个单元测试,以在 rxjava 链的 doOnScubscribe 和 doFinally 上完成某种副作用? 例如: Observable.requestSomeValueFromWeb
我是一名优秀的程序员,十分优秀!