3Des를 사용하는 제 3 자로부터 값을 해독하는 데 문제가 있습니다. 그들은 나에게 키, 암호화 된 값, 사용 된 모드, 해독 된 값이 무엇인지 알려주지 만, 지금까지는 포인트 a에서 b로가는 방법을 찾지 못했습니다. 나는 그 문제가 그들이 준 열쇠와 관련이 있다고 믿는다. 그들은 그것이 명백한 텍스트 키라고 말하지만, 나는 여전히 어떻게 든 더 변형 될 필요가 있다고 생각한다.Java를 사용하여 3Des의 값을 암호 해독
코드는 다음과 같습니다 (이 경우에 AC9C5A46A63FC9EA) 값을 해독하는 방법을
모든 통찰력을 주시면 감사하겠습니다을 이해하는 내 초기 시도의 예입니다.
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
public class TripleDes2 {
private static final String UNICODE_FORMAT = "UTF8";
private static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
private static final String CIPHER_ALG = "DESede/ECB/Nopadding"; //assuming no padding
private KeySpec ks;
private SecretKeyFactory skf;
private Cipher cipher;
private byte[] arrayBytes;
private String myEncryptionKey;
private SecretKey key;
public static void main(String args []) throws Exception {
TripleDes2 td= new TripleDes2();
String decrypted = td.decrypt("AC9C5A46A63FC9EA");
System.out.println("expecting: 04286EDDFDEA6BD7");
System.out.println("found: " + decrypted);
}
public TripleDes2() throws Exception {
myEncryptionKey = "1032FD2CD64A9D7FA4D061F76B04BFEA";
arrayBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
ks = new DESedeKeySpec(arrayBytes);
skf = SecretKeyFactory.getInstance(DESEDE_ENCRYPTION_SCHEME);
cipher = Cipher.getInstance(CIPHER_ALG);
key = skf.generateSecret(ks);
}
public String decrypt(String encryptedString) {
String decryptedText=null;
try {
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encryptedText = encryptedString.getBytes();
byte[] plainText = cipher.doFinal(encryptedText);
decryptedText= new String(plainText);
} catch (Exception e) {
e.printStackTrace();
}
return decryptedText;
}
}
당신이 직면 한 문제는 무엇을 써야합니다. –