Вопрос по java, encryption, aes – Есть ли пример кода Java, который выполняет шифрование AES точно так же, как этот сайт?

4

http://www.hanewin.net/encrypt/aes/aes-test.htm

Если вы заходите на этот сайт и вводите следующее:

"Key In Hex":        00000000000000000000000000123456

"Plain Text in Hex": 00000000000000000000000000000000

И нажмите наШифрование» На кнопке вы увидите зашифрованный текст в шестнадцатеричном виде:

3fa9f2a6e4c2b440fb6f676076a8ba04

Есть ли Java-программа, в которой я могу это сделать (т.е. есть ли библиотека AES, которая будет вводить "Key In Hex " выше с "Обычный текст в шестнадцатеричном формате " выше и генерировать зашифрованный текст в шестнадцатеричном коде выше? )?

Буду признателен за любые советы или ссылки на пример кода Java, который делает это.

Это'Важно отметить, что этот режим не должен использоваться на практике, так как он имеет слабые свойства безопасности. CodesInChaos
Спасибо за вклад, ребята, но яМне до сих пор не ясно, как будет выглядеть код. user1068636
docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/... Хотя в этом примере используется Blowfish. ignis
stackoverflow.com/questions/992019/... посмотрим, поможет ли это Ashwin

Ваш Ответ

2   ответа
9

E.

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

public class EncryptionExample {

  public static void main(String[] args) throws Exception {
    final String keyHex = "00000000000000000000000000123456";
    final String plaintextHex = "00000000000000000000000000000000";

    SecretKey key = new SecretKeySpec(DatatypeConverter
        .parseHexBinary(keyHex), "AES");

    Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, key);

    byte[] result = cipher.doFinal(DatatypeConverter
        .parseHexBinary(plaintextHex));

    System.out.println(DatatypeConverter.printHexBinary(result));
  }
}

Печать:

3FA9F2A6E4C2B440FB6F676076A8BA04

Любые подсказки, чтобы расшифровать это? Toaster
0

se64. Мне нравится использовать Apache Commons для этого. Вот пример.

Для компиляции вам понадобится дополнительный jar-кодек Apache Commons, который доступен здесь:

http://commons.apache.org/proper/commons-codec/download_codec.cgi

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

public class Encryptor {
    public static String encrypt(String key1, String key2, String value) {
        try {
            IvParameterSpec iv = new IvParameterSpec(key2.getBytes("UTF-8"));

            SecretKeySpec skeySpec = new SecretKeySpec(key1.getBytes("UTF-8"),
                    "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
            byte[] encrypted = cipher.doFinal(value.getBytes());
            System.out.println("encrypted string:"
                    + Base64.encodeBase64String(encrypted));
            return Base64.encodeBase64String(encrypted);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String key1, String key2, String encrypted) {
        try {
            IvParameterSpec iv = new IvParameterSpec(key2.getBytes("UTF-8"));

            SecretKeySpec skeySpec = new SecretKeySpec(key1.getBytes("UTF-8"),
                    "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));

            return new String(original);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {

        String key1 = "Bar12345Bar12345"; // 128 bit key
        String key2 = "ThisIsASecretKet";
        System.out.println(decrypt(key1, key2,
                encrypt(key1, key2, "Hello World")));
    }
}

Похожие вопросы