我需要一个加密算法,通过它我可以将数据加密成一个简单的纯文本。
目前我正在使用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 =="
当我将查询字符串作为
- 本地主机:8080/我的项目/主页?代码= TEj + TWBQExpz8/p5SAjIhA ==**
我正在控制器中获取字符串-
"TEj TWBQExpz8/p5SAjIhA =="
"+"符号丢失,这就是为什么我得到的问题,而解密。
请建议任何新的算法或任何解决方案,以避免特殊字符。
谢谢你。
7条答案
按热度按时间bfrts1fy1#
您可以使用URLEncoder对加密部分进行编码
以使其对URL有效。
http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html
2ic8powd2#
您应该尝试Apache Commons Base64 URL安全编码器,它将生成您需要的内容。
希望能有所帮助,
若泽·路易斯
42fyovps3#
您必须使用
URLEncoder
对加密值进行编码,然后才能通过URL发送。在解密端,必须首先使用
URLDecoder
来解码接收到的数据。您可以在代码中执行以下操作来实现此目的:
rdrgkggo4#
我在基于Spring的应用程序中遇到了同样的问题,我用Base64编码/解码过程解决了这个问题。
编码:
解码:
那么您就可以在您的解密方法上成功地解密"encryptedString"值。
希望能有所帮助。
yhived7q5#
仅使用
URLEncode
,无需更改代码。String encodedStr = URLEncoder.encode(encrypt("XYZ"), "UTF-8");
并且不需要使用URLDecode来解码url,因为您可以使用普通的
decrypt(encodedStr);
vqlkdk9b6#
你必须在C#应用程序中使用这个来编码加密的值,在通过URL.Decryption端发送之前,你必须先使用UrlDecode来解码QueryString数据。
lbsnaicq7#
您可以使用Base64.encodeBase64URLSafeString。
示例: