首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.crypto.BadPaddingException

javax.crypto.BadPaddingException
EN

Stack Overflow用户
提问于 2011-04-07 01:55:20
回答 1查看 1.6K关注 0票数 0

这就是我如何创建我的AES密码,但我仍然得到这个错误的BadPaddingException在doFinal()块的解密

代码语言:javascript
复制
// Get the key generator            
   KeyGenerator kg = KeyGenerator.getInstance("AES");
   kg.init(128);
   SecretKey sk = kg.generateKey();
   byte[] iv = new byte[]{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
   AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);

   ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
   dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

   ecipher.init(Cipher.ENCRYPT_MODE, sk,paramSpec);
   dcipher.init(Cipher.DECRYPT_MODE, sk,paramSpec);

解密方法代码

代码语言:javascript
复制
public String decr(String str) {
        try {
            byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
            byte[] utf8 = dcipher.doFinal(dec);
            return new String(utf8, "UTF8");
        } catch (Exception ex) {
            return null;
        }
    }

加密方法

代码语言:javascript
复制
public String encr(String str) {
        try {
            byte[] utf8 = str.getBytes("UTF8");
            byte[] enc = ecipher.doFinal(utf8);
            return new sun.misc.BASE64Encoder().encode(enc);
        } catch (Exception ex) {
            return null;
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-07 03:03:18

你的代码对我来说工作得很好:

代码语言:javascript
复制
package com.sandbox;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;

public class EncryptionTest
{
    private final Cipher ecipher;
    private final Cipher dcipher;

    public EncryptionTest() throws Exception
    {
        KeyGenerator kg = KeyGenerator.getInstance("AES");
        kg.init(128);
        SecretKey sk = kg.generateKey();
        byte[] iv = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
        AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);

        ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

        ecipher.init(Cipher.ENCRYPT_MODE, sk, paramSpec);
        dcipher.init(Cipher.DECRYPT_MODE, sk, paramSpec);
    }

    public String encrypt(String str) throws IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException
    {
        byte[] utf8 = str.getBytes("UTF8");
        byte[] enc = ecipher.doFinal(utf8);
        return new sun.misc.BASE64Encoder().encode(enc);
    }

    public String decrypt(String str) throws IOException, IllegalBlockSizeException, BadPaddingException
    {
        byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
        byte[] utf8 = dcipher.doFinal(dec);
        return new String(utf8, "UTF8");
    }

    public static void main(String[] args)
    {
        try
        {
            EncryptionTest sandbox = new EncryptionTest();
            System.out.println(sandbox.decrypt(sandbox.encrypt("Hello world")));
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
    }
}

这将打印出Hello World

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5570834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档