Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复我遇到的Base64错误?_Java_Base64 - Fatal编程技术网

Java 如何修复我遇到的Base64错误?

Java 如何修复我遇到的Base64错误?,java,base64,Java,Base64,在阅读了大量关于AES、JCE及其256位密钥的无限强度策略文件之后,我实现了这个 更新 我组合了sun提供的代码并创建了一个java类 java /** * * @author MUDASSIR */ import java.security.*; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import sun.misc.*; public class AESencrp { private

在阅读了大量关于AES、JCE及其256位密钥的无限强度策略文件之后,我实现了这个

更新

我组合了sun提供的代码并创建了一个java类 java

/**
 *
 * @author MUDASSIR
 */

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;

public class AESencrp {

     private static final String ALGO = "AES";
//    private static final byte[] keyValue = 
//        new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't',
//'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };

public static String encrypt(String Data, byte[] keyValue) throws Exception {
        Key key = generateKey(keyValue);
        Cipher c = Cipher.getInstance(ALGO);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encVal = c.doFinal(Data.getBytes());
        String encryptedValue = new BASE64Encoder().encode(encVal);
        return encryptedValue;
    }

    public static String decrypt(String encryptedData, byte[] keyValue) throws Exception {
        Key key = generateKey(keyValue);
        Cipher c = Cipher.getInstance(ALGO);
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decodedValue = new BASE64Decoder().decodeBuffer(encryptedData);
        byte[] decValue = c.doFinal(decodedValue);
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }
    private static Key generateKey(byte[] keyValue) throws Exception {
        Key key = new SecretKeySpec(keyValue, ALGO);
        return key;
}

}
这很好,但每当我构建项目时,它都会发出警告:“Base64encoder是一个专有软件,必须在将来的版本中删除”

当我卸下base64编码器并改用asHex方法时(如《太阳报》提供的),它给了我一个BADPADING异常。
线程“main”javax.crypto.BadPaddingException中的异常:给定的最后一个块没有正确填充

这是我没有base64编码器的代码

/**
 *
 * @author MUDASSIR
 */

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;

public class AESencrp2 {

     private static final String ALGO = "AES";
//    private static final byte[] keyValue = 
//        new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't',
//'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };

     public static String asHex(byte buf[]) {
        StringBuilder strbuf = new StringBuilder(buf.length * 2);
        int i;

        for (i = 0; i < buf.length; i++) {
            if (((int) buf[i] & 0xff) < 0x10) {
                strbuf.append("0");
            }

            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
        }

        return strbuf.toString();
    }

public static String encrypt(String Data, byte[] keyValue) throws Exception {
        Key key = generateKey(keyValue);
        Cipher c = Cipher.getInstance(ALGO);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedValue = c.doFinal(Data.getBytes());
        return asHex(encryptedValue);
    }

    public static String decrypt(String encryptedData, byte[] keyValue) throws Exception {
        Key key = generateKey(keyValue);
        Cipher c = Cipher.getInstance(ALGO);
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decValue = c.doFinal(encryptedData.getBytes());
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }
    private static Key generateKey(byte[] keyValue) throws Exception {
        Key key = new SecretKeySpec(keyValue, ALGO);
        return key;
}

}
问题,

  • 1-如果我使用base64编码器,它是专有的
  • 2-如果使用sun提供的asHex方法,我会得到错误的填充异常

  • 请提供帮助。

    您可以使用自己的Base64编码/解码例程来解决此问题。

    您到底有什么问题?如何使用AES加密数据?或者如何运行您提供的源?或者别的什么?你指的是我自己的编码/解码程序??你使用或编码Base64编码器/解码器。例如,Apache Commons有一个,我导入了这个导入org.Apache.Commons.codec.binary.Base64;并尝试了新的Base64();但它不起作用请参阅类文档。Ok org.apache.commons.codec.binary.Base64解决了问题:)谢谢大家的帮助。。。
    public static void main(String args[]) throws Exception {
    
            byte[] keyValue = new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't',
    'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };
    
            String password = "This is the data that is going to be encrypted";
    
            String passwordEnc = AESencrp.encrypt(password, keyValue);
            //String passwordEnc = AESencrp2.encrypt(password, keyValue);
    
            String passwordDec = AESencrp.decrypt(passwordEnc, keyValue);
            //String passwordDec = AESencrp.decrypt(passwordEnc, keyValue);
    
            System.out.println("Plain Text : " + password);
            System.out.println("Encrypted Text : " + passwordEnc);
            System.out.println("Decrypted Text : " + passwordDec);
    }