java - 如何在java中将数据加密为没有特殊字符的纯文本

标签 java encryption aes

我需要一种加密算法,通过它我可以将数据加密为简单的纯文本。

目前我正在使用AES 加密算法,它转换为包含特殊字符的加密字符串。

这里,如果我通过 url 中的查询字符串发送此字符串,我会丢失一些字符,例如“+”。

所以我需要一个安全且仅包含字母的加密逻辑。

这是我的加密逻辑:

      public static String encrypt(String Data) throws Exception {
        Key key = generateKey();
        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;
    }

    @SuppressWarnings("restriction")
    public static String decrypt(String encryptedData) throws Exception {
        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);
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }

这里我得到一个加密字符串“TEj+TWBQExpz8/p5SAjIhA==

当我通过查询字符串发送时

localhost:8080/myproject/home?code=TEj+TWBQExpz8/p5SAjIhA==

我将 Controller 中的字符串作为-
TEj TWBQExpz8/p5SAjIhA==

“+”符号丢失,这就是我在解密时遇到问题的原因。

请提出任何新的算法或任何解决方案来避免特殊字符。

谢谢。

最佳答案

您可以使用 URLEncoder 对加密部分进行编码

URLEncoder.encode("TEj+TWBQExpz8/p5SAjIhA==", "UTF-8")

使其对 URL 有效。

http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html

关于java - 如何在java中将数据加密为没有特殊字符的纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30092044/

相关文章:

c# - .NET 加密问题

c# - AES 64 key 生成

node.js - 使用 node.js 解密 AES256 返回错误的最终 block 长度

java - 使用 Java 和 PHP 的 AES CBC 128 位加密

Java:如何处理可能需要大约 10 秒的 API 调用

java - StandardTokenizer 是否删除标点符号(在 Lucene 4.1 中)

encryption - SHA-256 适合密码加密吗?

java - Gradle:如何将附加包包含到 war 中?

java - 将现有的 Java 项目从 Java 1.6 升级到 1.8

C# 在将字符串转换为 byte[] 并将 byte[] 转换为字符串时出现内存不足异常