Member 10239759 Ответов: 1

AES cbc 128 битный алгоритм для php, iphone и android


Пожалуйста, дайте код для всех трех php iphone и android

придется выводить один и тот же шифровальный код...

и результирующее значение должно воспроизводить тот же текст, который мы дали для шифрования

у меня был java android код и iphone код имеет результат того же значения
package com.example.aesalg;

import java.security.MessageDigest;
import java.security.spec.AlgorithmParameterSpec;

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

import android.util.Base64;

public class AESCrypt {

    private final Cipher cipher;
    private final SecretKeySpec key;
    private AlgorithmParameterSpec spec;

    public AESCrypt(String password) throws Exception
    {
        // hash password with SHA-256 and crop the output to 128-bit for key
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        digest.update(password.getBytes("UTF-8"));
        byte[] keyBytes = new byte[32];
        System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);

        cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        key = new SecretKeySpec(keyBytes, "AES");
        spec = getIV();
    }

    public AlgorithmParameterSpec getIV()
    {
        byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
        IvParameterSpec ivParameterSpec;
        ivParameterSpec = new IvParameterSpec(iv);

        return ivParameterSpec;
    }

    public String encrypt(String plainText) throws Exception
    {
        cipher.init(Cipher.ENCRYPT_MODE, key, spec);
        byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8"));
        String encryptedText = new String(Base64.encode(encrypted, Base64.DEFAULT), "UTF-8");
        System.out.println("Encrypt Data"+ encryptedText);
        return encryptedText;
    }

    public String decrypt(String cryptedText) throws Exception
    {
        cipher.init(Cipher.DECRYPT_MODE, key, spec);
        byte[] bytes = Base64.decode(cryptedText, Base64.DEFAULT);
        byte[] decrypted = cipher.doFinal(bytes);
        String decryptedText = new String(decrypted, "UTF-8");
        System.out.println("Encrypt Data"+ decryptedText);
        return decryptedText;
    }
}

но я не могу попасть в php, я получаю результат для
text:muthu
key:u

в мобильном телефоне я получаю результат как
MhPPaUb7eMbol6zUKjHcrA==

это мой php код
$data_to_encrypt = "muthu";
$key128 = "u";
$iv = "0000000000000000";

$cc = $data_to_encrypt;
$key = $key128;
$iv =  $iv;
$length = strlen($cc);

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc',$iv);

mcrypt_generic_init($cipher, $key, $iv);
$encrypted = base64_encode(mcrypt_generic($cipher,$cc));
mcrypt_generic_deinit($cipher);

mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher,base64_decode($encrypted));
mcrypt_generic_deinit($cipher);

echo "encrypted: " . $encrypted;
echo "";
echo "length:".strlen($encrypted);
echo "<br />";
echo "decrypted: " . substr($decrypted, 0, $length);

я получаю результат как
hlxZgzP+0afprqIzYyEKSw==

помоги мне закончить

заранее спасибо

[no name]

"это очень срочно", нет, это совсем не срочно. Ваше отсутствие планирования не делает его чрезвычайным для кого-либо еще.

Member 10239759

хорошо что бы это ни было мне нужно решение этой проблемы вы можете мне помочь

[no name]

И что это за проблема? Вы просто бросили свой код сюда и грубо попросили нас сделать вашу работу за вас. Никаких упоминаний о том, какой вклад вы вкладывали, какой результат вы получаете, сколько вы платите за то, чтобы кто-то выполнял вашу работу за вас, как вы собираетесь платить им... Не то чтобы вы нашли здесь кого-то, кто сделает это за вас в любом случае.

Member 10239759

я получаю результат для

текст:мутху
ключ:u

в мобильном телефоне я получаю результат как

MhPPaUb7eMbol6zUKjHcrA==


$data_to_encrypt = " muthu";
$key128 = " u";
$iv = " 0000000000000000";

$ГК = $data_to_encrypt;
$key = $key128;
$Ив = $И.;
$length = strlen($cc);

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,", 'cbc',$iv);

mcrypt_generic_init($х, $ключ, $Ив);
$шифруются = base64_encode(mcrypt_generic($х,$куб.));
mcrypt_generic_deinit($шифра);

mcrypt_generic_init($х, $ключ, $Ив);
$расшифровать = mdecrypt_generic($шифра,base64_decode($зашифрованы));
mcrypt_generic_deinit($шифра);

Эхо "зашифровано:" . $зашифрованы;
Эхо " < br/?-- & gt;";
echo " length:". strlen($encrypted);
Эхо " < br/ & gt;";
echo " decrypted:". substr($decrypted, 0, $length);




это мой php код
я получаю hlxZgzP+0afprqIzYyEKSw==

1 Ответов

Рейтинг:
5

Prasad Khandekar

Привет Член,

Я думаю, что функция PHP mcrypt использует нулевую байтовую входную строку. Поэтому в вашем java-коде установите преобразование как AES/CBC/NoPadding, а затем дополните входную строку 0. Следующие фрагменты кода дают идентичные результаты.

PHP-код

<?php
$plaintext = "muthu";
$key256    = "12345678901234561234567890123456";
$iv        = "1234567890123456";

$plaintext_utf8 = utf8_encode($plaintext);
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'cbc', $iv);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key256, $plaintext_utf8, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
?>

Java-код
String strKey = "12345678901234561234567890123456";
byte[] arrKey = strKey.getBytes("UTF-8");
byte[] ivKey = new byte[16];
byte[] bytIn = new byte[] {'m', 'u', 't', 'h', 'u', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
System.arraycopy(arrKey, 0, ivKey, 0, 16);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(arrKey, "AES"), new IvParameterSpec(ivKey));
byte[] enc = cipher.doFinal(bytIn);
return new String(Base64.encodeBase64(enc));

С уважением,


Member 10239759

возвращает новую строку(в base64.encodeBase64(энк));

В base64.encodeBase64(энк)

отображение неопределенной функции android

заранее спасибо

Prasad Khandekar

С Помощью Base64.кодирование(энк, по алгоритму base64.Вместо значения по умолчанию). (http://developer.android.com/reference/android/util/Base64.html)

С уважением,

Member 10239759

спасибо, мистер Прасад хандекар, он прекрасно работает
у меня мало вопросов

byte[] bytIn = new byte [] {'m', 'u', 't', 'h', 'u', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

но я хочу разместить большую веревку.

как разместить строку и

также еще одна помощь

расшифровка на php и java

шифрование и дешифрование в iphone необходимо

для iphone также нужно производить тот же вывод, что и в php и android

заранее благодарю господина Прасада хандекара

Member 10239759

спасибо я нашел решение для этого с помощью PKCS7Padding в php
теперь я исправил эту проблему

спасибо за ваш ответ

Prasad Khandekar

Отлично!