gpt4 book ai didi

java - 为什么 Blowfish 加密中的正斜杠会被删除?

转载 作者:行者123 更新时间:2023-12-01 10:00:36 25 4
gpt4 key购买 nike

考虑以下执行 Blowfish 加密的方法:

import javax.crypto.Cipher;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;

private static String encryptString(String value, String key)
{
String encryptedString = "";
if (value != null)
{
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "Blowfish");
try
{
Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS#5");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
encryptedString = new String(Hex.encodeHex(encrypted));
}
catch (Exception e)
{
// Show error
}
}
return encryptedString;
}

我想要编码的字符串包含正斜杠。当我尝试编码例如“http://www.google.com/Foo ”时,由于某种原因,当我解码它时,正斜杠被删除,例如“http://www.google.comFoo”。

造成这种情况的可能原因是什么以及如何预防这种情况?

最佳答案

这是您用来检查加密文本的网站 ( https://webnet77.net/cgi-bin/helpers/blowfish.pl ) 的错误。

尝试加密该网站上的文本 (http://www.google.com/Foo),您会发现它删除了斜杠。 Java 没有。

<小时/>

其他问题:

  • key 参数的值是多少?

    如果它是 Blowfish key 的十六进制编码,则 getBytes() 是完全错误的,因为您需要对其进行十六进制解码,而不是当前正在执行的代码页转换。

    SecretKeySpec 需要一个 byte[],因为 key 是二进制值,不能存储纯文本。

  • Blowfish/ECB/PKCS#5 不是 JDK 中的有效密码。

    Blowfish/ECB/PKCS5PADDING 是。

  • 如果您的 value 参数可以包含纯 ASCII 以外的任何内容,则 value.getBytes() 是不够的。将字符串转换为字节时,您应该始终指定代码页。

    您可以指定“US-ASCII”仅强制执行A​​SCII,或指定服务器所需的代码页,但“UTF-8”通常是一个不错的选择选择。

关于java - 为什么 Blowfish 加密中的正斜杠会被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com