Java编码和解码没有正斜杠或反斜杠的字符串

标签 java base64 aes

我有编码和解码字符串的代码。

当我输入“9”时,加密方法返回“9iCOC73F/683bf5WRJDnKQ==”

问题是,当我对 String 进行编码时,有时它会返回带有 (/or\) 的编码字符串,我想从 String 中删除 (/or\) .

那么我怎样才能用我的加密和解密这两种方法来实现。

import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class EncryptDecryptAESAlgo {
    private static final String ALGO = "AES";
    private static final byte[] keyValue = new byte[] { 'A', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'o', 'p' };

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

    public String decrypt(String encryptedData) throws Exception {
        String decryptedValue = "";
        try {
            Key key = generateKey();
            Cipher c = Cipher.getInstance(ALGO);
            c.init(Cipher.DECRYPT_MODE, key);
            byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
            byte[] decValue = c.doFinal(decordedValue);
            decryptedValue = new String(decValue);
            return decryptedValue;
        } catch (Exception e) {
        }
        return decryptedValue;
    }

    private Key generateKey() throws Exception {
        Key key = new SecretKeySpec(keyValue, ALGO);
        return key;
    }
}

我正在使用 Java。

最佳答案

使用 Base64“URL 安全”编码,如 IETF RFC 4648 Section 5 中所述.这会将 +/ 字符分别替换为 -_。实例化这些编码器/解码器如下:

java.util.Base64.Encoder encoder = java.util.Base64.getUrlEncoder();
java.util.Base64.Decoder decoder = java.util.Base64.getUrlDecoder();

关于Java编码和解码没有正斜杠或反斜杠的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38633402/

相关文章:

java - Mockito 在通过 when() 时无法识别我的模拟类

java - 如何通过添加所有回收器 View 行来获得总计

java - Java垃圾收集器会回收包含对其他对象的引用的非引用对象吗

java - AWT Graphics DrawString 导致斜体 - 倾斜字体的宽度不正确

javascript - Node.js:将 base64 编码的图像响应为 JSON

HTML:嵌入没有 base64 压缩的二进制图像

php - Laravel AES-256加密和MySQL

php - 用 PHP 加密,用 C 解密

javascript - 如何解码 HTML 中的 base64 html?

c# - 如何在 JavaScript 中加密字符串并在 C# 中解密该字符串