Я пытаюсь зашифровать те же данные в Java, используя алгоритм DES / ECB / PKCS5Padding с жестко закодированным секретным ключом. Я подтвердил свое зашифрованное значение с помощью онлайн-инструмента . Если я использовал секретный ключ со специальными символами, то Java и онлайн-инструмент зашифрованные значения не идентичны.
Если я использовал Ключ 2b7e151628aed2a6abf71589 и введите текст 1234 тогда зашифрованный результат такой же, как у онлайн-инструмента . Зашифрованный результат для этого текста с использованием Java равен SRC / 0ptoT78 = , что совпадает с онлайн-инструментом , Изображение также прикреплено для справки
но если я использовал Ключ / £ ½ZBÝy ‚÷ Í (Ó - & * Ænù; '³ и снова вводил текст 1234 , то зашифрованный результат не совпадает с онлайн-инструмент . Зашифрованный результат для этого текста с использованием Java равен UUoh48bB9dM = , что не совпадает с онлайн-инструментом , изображение также прикреплено для справки
Мой java код указан ниже
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.Key;
public class Main {
public static void main(String[] args) {
try {
System.out.println(encrypt("/£½ZBÝy‚÷Í( Ó—&*Ænù;‘³", "1234"));
System.out.println(encrypt("2b7e151628aed2a6abf71589", "1234"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encrypt(String key, String str) throws Exception {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
System.out.println(new String(key.getBytes(), "UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
Key secretKey = keyFactory.generateSecret(desKeySpec);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
byte[] base64Bytes = Base64.encodeBase64(bytes);
return new String(base64Bytes);
}
public static String decrypt(String key, String str) throws Exception {
byte[] data =Base64.decodeBase64(str);
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(data);
return new String(decryptedBytes, "gb2312");
}
}