gpt4 book ai didi

java - 使用 DES 的 URL 解密错误

转载 作者:行者123 更新时间:2023-12-01 13:09:08 24 4
gpt4 key购买 nike

在通过电子邮件发送 URL 之前,我能够成功加密/解密我的 URL,但在传递 URL 并检索它之后,我解密了 URL 的加密部分,但未正确解密。解密后得到奇怪的字符,例如:

加密前我的文本:

dkjkb7i8doprgeh521tbbdll9r-Sat Apr 12 17:21:01 EEST 2014

我的文字:

decryption:ziUO5baLOpFaOfWBtMOLhrRBR2ucXnxFHbA2KoRUVVQst6oDqUrGIU04qey4xU6haNvyp18+BROzadH6MXNxKA==

发送url后解密,发送url后解密文本:

dkjkb7i8doprgeh521tbbdll9r-Sat Apr 12 17:21:01 **E[???xno**

这是我用于加密、解密的 DES 类:

package com;

import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DESEncryption {

private static final String UNICODE_FORMAT = "UTF8";
public static final String DES_ENCRYPTION_SCHEME = "DES";
private KeySpec myKeySpec;
private SecretKeyFactory mySecretKeyFactory;
private Cipher cipher;
byte[] keyAsBytes;
private String myEncryptionKey;
private String myEncryptionScheme;
SecretKey key;

public DESEncryption() throws Exception {
myEncryptionKey = "ThisIsSecretEncryptionKey";
myEncryptionScheme = DES_ENCRYPTION_SCHEME;
keyAsBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
myKeySpec = new DESKeySpec(keyAsBytes);
mySecretKeyFactory = SecretKeyFactory.getInstance(myEncryptionScheme);
cipher = Cipher.getInstance(myEncryptionScheme);
key = mySecretKeyFactory.generateSecret(myKeySpec);
}

/**
* Method To Encrypt The String
*/
public String encrypt(String unencryptedString) {
String encryptedString = null;
try {
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT);
byte[] encryptedText = cipher.doFinal(plainText);
BASE64Encoder base64encoder = new BASE64Encoder();
encryptedString = base64encoder.encode(encryptedText);
} catch (Exception e) {
e.printStackTrace();
}
return encryptedString;
}

/**
* Method To Decrypt An Ecrypted String
*/
public String decrypt(String encryptedString) {
String decryptedText = null;
try {
cipher.init(Cipher.DECRYPT_MODE, key);
BASE64Decoder base64decoder = new BASE64Decoder();
byte[] encryptedText = base64decoder.decodeBuffer(encryptedString);
byte[] plainText = cipher.doFinal(encryptedText);
decryptedText = bytes2String(plainText);
} catch (Exception e) {
e.printStackTrace();
}
return decryptedText;
}

/**
* Returns String From An Array Of Bytes
*/
private static String bytes2String(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer();

for (int i = 0; i < bytes.length; i++) {
stringBuffer.append((char) bytes[i]);
}
return stringBuffer.toString();
}

}

最佳答案

Base 64 使用 /+ 字符。您需要执行以下任一操作:

  1. 对您的 Base 64 字符串进行 URL 编码;
  2. 使用 base 64 variant这对于 URL 来说是安全的。

第一个更容易编码,但可能比第二个效率低(如果编码中有许多 /+ 字符)。

请注意,您可以使用简单的字符串替换来利用#2,因此这并不难。

关于java - 使用 DES 的 URL 解密错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23032262/

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