相关疑难解决方法(0)

鉴于最终块未正确填充

我正在尝试实现基于密码的加密算法,但是我得到了这个例外:

javax.crypto.BadPaddingException:给定最终块未正确填充

可能是什么问题?(我是Java新手.)

这是我的代码:

public class PasswordCrypter {

    private Key key;

    public PasswordCrypter(String password)  {
        try{
            KeyGenerator generator;
            generator = KeyGenerator.getInstance("DES");
            SecureRandom sec = new SecureRandom(password.getBytes());
            generator.init(sec);
            key = generator.generateKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public byte[] encrypt(byte[] array) throws CrypterException {
        try{
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);

            return cipher.doFinal(array);
        } catch (Exception e) { 
            e.printStackTrace();
        }
        return null;
    }

    public byte[] decrypt(byte[] array) throws CrypterException{
        try{
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);

            return cipher.doFinal(array);
        } …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography exception javax.crypto

102
推荐指数
2
解决办法
24万
查看次数

Big Endian和Little Endian Byte顺序之间的区别

Big Endian和Little Endian Byte命令有什么区别?

这两者似乎都与Unicode和UTF16有关.我们到底在哪里使用它?

unicode utf-16 endianness

62
推荐指数
4
解决办法
8万
查看次数

用Java解码Base64字符串

我正在尝试解码一个简单的Base64字符串,但我无法这样做.我目前正在使用该org.apache.commons.codec.binary.Base64软件包.

我正在使用的测试字符串是:abcdefg,使用PHP编码YWJjZGVmZw==.

这是我目前正在使用的代码:

Base64 decoder = new Base64();
byte[] decodedBytes = decoder.decode("YWJjZGVmZw==");
System.out.println(new String(decodedBytes) + "\n") ;   
Run Code Online (Sandbox Code Playgroud)

上面的代码不会抛出错误,而是不会按预期输出解码后的字符串.

java base64

58
推荐指数
3
解决办法
14万
查看次数

BadPaddingException:给定最终块未正确填充

我有一个带有DES/ECB/PKCS5Padding的私钥文件(由一个秘密短语生成的56位DES密钥),我想解密它.我不知道为什么,但每次我尝试decript,我的密码类的方法doFinal抛出这个错误:

javax.crypto.BadPaddingException:给出com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)的com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)的最终块没有正确填充.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)在javax.crypto.Cipher.doFinal(DashoA13*..)at ...

这是我的代码:

public static PrivateKey readPrivateKeyFromFile(File file, String chaveSecreta) {
    try {
        SecureRandom r = new SecureRandom(chaveSecreta.getBytes());
        KeyGenerator keyGen = KeyGenerator.getInstance("DES");
        keyGen.init(56, r);
        Key key = keyGen.generateKey();

        byte[] privateKeyBytes = decryptPKFile(file, key);

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        PrivateKey privateKey = null;
        try {
            privateKey = keyFactory.generatePrivate(privateKeySpec);
        } catch (InvalidKeySpecException e) {
            JOptionPane.showMessageDialog(null, "Erro 01, tente mais tarde");
        }
        return privateKey;
    } catch (NoSuchAlgorithmException e) {
        JOptionPane.showMessageDialog(null, "Erro 02, tente mais tarde");
    }
    return null; …
Run Code Online (Sandbox Code Playgroud)

java encryption

5
推荐指数
1
解决办法
2万
查看次数