使用 AES/ECB/NoPadding 与 PKCS5Padding 进行加密

中国的膳宿条件

我没有代码不工作的问题,但它令人困惑,我不知道为什么即使我使用 16 字节长的字符串(所以不需要填充)我有奇怪的短输出 cG+etVq+7l+RfJS27jCtwg== (没有填充,但在加密之前它是 16 字节长)

对比

cG+etVq+7l+RfJS27jCtwskFauqkVxpbMJGODZoZe5c=(使用 PKCS5Padding,但字符串是相同的) 那么为什么?

public class AES {

private static SecretKeySpec secretKey;
private static byte[] key;

public static void setKey(String myKey)
{

        key = myKey.getBytes("UTF-8");
        secretKey = new SecretKeySpec(key, "AES");


}

public static String encrypt(String strToEncrypt, String secret)
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
    }
    catch (Exception e)
    {
        System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
}

public static String decrypt(String strToDecrypt, String secret)
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    }
    catch (Exception e)
    {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}

public static SecretKeySpec getSecretKey() {
    return secretKey;
}

public static void setSecretKey(SecretKeySpec secretKey) {
    AES.secretKey = secretKey;
}

public static byte[] getKey() {
    return key;
}

public static void setKey(byte[] key) {
    AES.key = key;
}

}

fgb

使用PKCS5Padding,则始终添加填充。没有不需要填充的字符串。一个 16 字节的字符串将产生一个 32 字节的输出(下一个 16 的倍数)。

参见Wikipedia 上的Padding例如:

如果原始数据是 N 字节的整数倍,则添加值为 N 的额外字节块。这是必要的,以便解密算法可以确定地确定最后一个块的最后一个字节是指示添加的填充字节数的填充字节还是明文消息的一部分。

考虑一个明文消息,它是 N 字节的整数倍,明文的最后一个字节是 01。没有附加信息,解密算法将无法确定最后一个字节是明文字节还是填充字节。但是,通过在 01 明文字节后为每个值 N 添加 N 个字节,解密算法始终可以将最后一个字节视为填充字节,并从密文的末尾剥离适当数量的填充字节;表示要根据最后一个字节的值剥离的字节数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法复制从Java到PHP中使用AES / ECB / PKCS5Padding加密方法

来自分类Dev

如何在dart中使用AES CBC 256位和PKCS5Padding进行加密和解密以及如何检索参数

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

AES / cbc / pkcs5padding加密IOS

来自分类Dev

在Dart中解密AES / CBC / PKCS5Padding加密

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

使用CryptoJS解密AES / CBC / PKCS5Padding

来自分类Dev

所有类型的Android设备均可使用AES / CBC / PKCS5Padding加密解密算法和SHA-1哈希算法吗

来自分类Dev

从ColdFusion加密解密NodeJS中的AES / CBC / PKCS5Padding

来自分类Dev

如何使用Objective-c实现AES PKCS5Padding

来自分类Dev

使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

来自分类Dev

使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

来自分类Dev

使用 AES/CBC/PKCS7Padding 加密/解密

来自分类Dev

使用C ++进行XOR加密

来自分类Dev

使用GPGME进行对称加密

来自分类Dev

使用Caesar密码进行加密

来自分类Dev

使用AES进行视频加密

来自分类Dev

使用RSA_PKCS1_OAEP_PADDING进行RSA签名

来自分类Dev

使用RSA_PKCS1_OAEP_PADDING进行RSA签名

来自分类Dev

用PHP替换JAVA以进行PKCS5加密

来自分类Dev

使用node.js加密的PKCS5填充

来自分类Dev

C#中的Java AES / CBC / PKCS5Padding

来自分类Dev

Ruby中的Coldfusion“ AES / CBC / PKCS5Padding”解密

来自分类Dev

在提示用户输入密码进行加密的脚本中使用`grub-md5-crypt`

来自分类Dev

在目标 c 中,如何使用 md5 作为密钥进行 AES256 加密?

来自分类Dev

Java使用aes256 / CBC / PKCS7Padding加密文件

来自分类Dev

我如何使用公用密钥加密进行加密?

来自分类Dev

如何使用 Fernet 加密对字符串变量进行加密

来自分类Dev

使用phpseclib使用AES进行加密,并使用CryptoJS进行解密

Related 相关文章

  1. 1

    无法复制从Java到PHP中使用AES / ECB / PKCS5Padding加密方法

  2. 2

    如何在dart中使用AES CBC 256位和PKCS5Padding进行加密和解密以及如何检索参数

  3. 3

    用Java加密/解密“ AES / ECB / PKCS5Padding”

  4. 4

    AES / cbc / pkcs5padding加密IOS

  5. 5

    在Dart中解密AES / CBC / PKCS5Padding加密

  6. 6

    用Java加密/解密“ AES / ECB / PKCS5Padding”

  7. 7

    使用CryptoJS解密AES / CBC / PKCS5Padding

  8. 8

    所有类型的Android设备均可使用AES / CBC / PKCS5Padding加密解密算法和SHA-1哈希算法吗

  9. 9

    从ColdFusion加密解密NodeJS中的AES / CBC / PKCS5Padding

  10. 10

    如何使用Objective-c实现AES PKCS5Padding

  11. 11

    使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

  12. 12

    使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

  13. 13

    使用 AES/CBC/PKCS7Padding 加密/解密

  14. 14

    使用C ++进行XOR加密

  15. 15

    使用GPGME进行对称加密

  16. 16

    使用Caesar密码进行加密

  17. 17

    使用AES进行视频加密

  18. 18

    使用RSA_PKCS1_OAEP_PADDING进行RSA签名

  19. 19

    使用RSA_PKCS1_OAEP_PADDING进行RSA签名

  20. 20

    用PHP替换JAVA以进行PKCS5加密

  21. 21

    使用node.js加密的PKCS5填充

  22. 22

    C#中的Java AES / CBC / PKCS5Padding

  23. 23

    Ruby中的Coldfusion“ AES / CBC / PKCS5Padding”解密

  24. 24

    在提示用户输入密码进行加密的脚本中使用`grub-md5-crypt`

  25. 25

    在目标 c 中,如何使用 md5 作为密钥进行 AES256 加密?

  26. 26

    Java使用aes256 / CBC / PKCS7Padding加密文件

  27. 27

    我如何使用公用密钥加密进行加密?

  28. 28

    如何使用 Fernet 加密对字符串变量进行加密

  29. 29

    使用phpseclib使用AES进行加密,并使用CryptoJS进行解密

热门标签

归档