Java: Как расшифровать строку, зашифрованную на php с известным ключом? - PullRequest
0 голосов
/ 09 января 2012

, поэтому я зашифровал строку на своем php-сервере.

encrypt("http://google.com", "happy");

function encrypt($str, $key)
{
    $block = mcrypt_get_block_size('des', 'ecb');
    $pad = $block - (strlen($str) % $block);
    $str .= str_repeat(chr($pad), $pad);

    return mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
}

Кстати, это возвращает какую-то странную строку ... Я ожидал буквы и цифры: ZöÞ ÔP»8

Вернемся к Java, мне нужно расшифровать эту строку с помощью ключа.

Ответы [ 4 ]

1 голос
/ 09 января 2012

Я не в курсе дела с mcrypt, но использование открытого текста ASCII через шифрование не всегда приводит к шифрованию ASCII.Скорее всего, ваш зашифрованный зашифрованный текст будет преобразован в «странную строку», когда вы попытаетесь интерпретировать его как текст ASCII или Unicode.

1 голос
/ 09 января 2012
0 голосов
/ 10 января 2012

Я думаю, это будет полезно.Обратите внимание, что кодировка UTF-8.

public class Foo {

    public static void main(String[] args) {
        try {
            String cipherSpec = "DES/ECB/NoPadding";
            Cipher cipher = Cipher.getInstance(cipherSpec);
            int blockSize = cipher.getBlockSize();

            String keyText = "happy";
            Key key = new SecretKeySpec(padRight(keyText, blockSize).getBytes("UTF-8"), "DES");

            String input = "http://google.com";
                   input = padRight(input, input.length() + blockSize - (input.length() % blockSize));

            // encrypt
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] cipherText = cipher.doFinal(input.getBytes(CHARSET));
            System.out.println("\ncipher text: ");
            System.out.println(new String(cipherText, CHARSET));

            // decrypt
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] plainText = cipher.doFinal(cipherText);
            System.out.println("\nplain text: ");
            System.out.println(new String(plainText, CHARSET));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    final static String CHARSET = "UTF-8";

    static String padRight(String s, int n) {
        return String.format("%1$-" + n + "s", s);
    }
}
0 голосов
/ 09 января 2012

сначала убедитесь, что это не одностороннее шифрование.во-вторых, алгоритм и аргументы, используемые в php и обратном инжиниринге в java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...