3

Php WebServiceでこのコードを使用して、データを暗号化および復号化しています。

<?php
/**
 * Class that will deal with the encryption of the api
 */
class Encryption
{

    private $KEY = "some key"; //the encryption key

    /**
     * Encrypt data
     * @param $data string the data to encrypt
     * @return string the encrypted data
     */
    public function encrypt($data)
    {
        if (!empty($data))
            return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->KEY, $data, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
    }

    /**
     * Decrypt data
     * @param $data string the data to decrypt
     * @return string the decrypted data
     */
    public function decrypt($data)
    {
        if (!empty($data))
            return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->KEY, base64_decode($data), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
    }
}

?>

私のAndroidアプリケーションでは、これが私の暗号化方法です:

    /**
     * api encryption key
     */
    private static final String KEY = Base64.encodeBytes("some key".getBytes());

    /**
     * api's encryption algorithm
     */
    private static final String ALGOITHM = "AES/CBC/PKCS5Padding";  


    /**
     * Encrypt a data string
     * @param data the data string
     * @return an encrypted string
     * @throws Exception when encryption failed 
     */
    public static String encrypt(String data) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes(), ALGOITHM);
        Cipher cipher = Cipher.getInstance(ALGOITHM);
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] dataBytes = data.getBytes(););
        byte[] encryptedBytes = cipher.doFinal(dataBytes);
        return Base64.encodeBytes(encryptedBytes);
   }

しかし、まだデータが正しく表示されていません...何かアイデアはありますか?

4

1 に答える 1

0

あなたはmcrypt の罠にかかりました。

MCRYPT_RIJNDAEL_256は AES-256 ではなく、Rijndael の 256 ビット ブロック サイズのバリエーションです。AES は、256 ビット キーを使用する場合でも、常に 128 ビット ブロック サイズです。

代わりにlibsodiumを調べてください。Android、iOS、および PHP 用のバインディングがあります。PHP 7.2 以降にアップグレードする場合は、すでにインストールされている必要があります。

于 2018-11-01T22:28:37.037 に答える