java - 避免在加密和编码的 URL 字符串中换行

标签 java encryption

我正在尝试实现一个简单的字符串编码器来混淆 URL 字符串的某些部分(以防止它们被用户弄乱)。我使用的代码几乎与 JCA guide 中的示例相同,除了:

  • 使用 DES(假设它比 AES 快一点,并且需要更小的 key )和
  • 对字符串进行 Base64 编码/解码以确保它对于 URL 而言是安全的。

由于我无法理解的原因,输出字符串以换行符结尾,我认为这是行不通的。我不知道是什么原因造成的。关于更容易的类似内容的建议或指向其他一些资源的建议?我发现所有的密码学引用都让我有点头疼(并且矫枉过正),但是一个简单的 ROT13 实现是行不通的,因为我想处理更大的字符集(并且不想浪费时间实现一些可能有我没想到的晦涩字符的问题)。

示例输入(无换行符):

http://maps.google.com/maps?q=kansas&hl=en&sll=42.358431,-71.059773&sspn=0.415552,0.718918&hnear=Kansas&t=m&z=7

示例输出(换行符如下所示):

GstikIiULcJSGEU2NWNTpyucSWUFENptYk4m5lD8RJl8l1CuspiuXiE9a07fUEAGM/tC7h0Vzus+
jAH6cT4Wtz2RUlBdGf8WtQxVDKZVOzKwi84eQh2kZT9T3KomlnPOu2owJ/2RAEvG+QuGem5UGw==

我的编码片段:

final Key key = new SecretKeySpec(seed.getBytes(), "DES");
final Cipher c = Cipher.getInstance("DES");
c.init(Cipher.ENCRYPT_MODE, key);
final byte[] encVal = c.doFinal(s.getBytes());
return new BASE64Encoder().encode(encVal);

最佳答案

只需执行 base64Str = base64Str.replaceAll("(?:\\r\\n|\\n\\r|\\n|\\r)", "") 在编码字符串上。

当您尝试将其解码回字节时,它工作正常。我确实用随机生成的字节数组对它进行了多次测试。显然,解码过程只是忽略换行符,无论它们是否存在。 我使用 com.sun.org.apache.xml.internal.security.utils.Base64 测试了这个“确认工作” 其他编码器未测试。

关于java - 避免在加密和编码的 URL 字符串中换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282566/

相关文章:

安卓 2.1 : Bluetooth Encryption

java - AES vs AESWrap,它们有什么关系?

java - 无法在并发 HashMap 中添加元素 - 为什么?

java - Hibernate 在本地机器上工作但在 Heroku 上失败

java - 如何在android中通过引用传递对象以更改原始对象?

java - 如何从通用 JAXBElement<?延伸 >

Java:打印数字金字塔的改进,对齐和反转

go - 跨平台AES CryptLib

php - javascript->php 加密解密 - 请需要说明和方法

c# - 如何在 C# 中手动使用 PKCS5 (RFC 1423) 填充进行 AES 解密?