php安卓跨平台加密

标签 php android encryption

我在我的 Php WebSerice 中使用这段代码来加密和解密数据:

<?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);
   }

但数据显示不正确...有什么想法吗?

最佳答案

你爱上了 the mcrypt trap .

MCRYPT_RIJNDAEL_256 不是 AES-256,它是 Rijndael 的 256 位 block 大小变体。即使使用 256 位 key ,AES 始终是 128 位 block 大小。

查看libsodium反而。有针对 Android、iOS 和 PHP 的绑定(bind)。如果您升级到 PHP 7.2 或更高版本,您应该已经安装了它。

关于php安卓跨平台加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043352/

相关文章:

android - 套接字在android中连接后立即断开连接

java - OnLongCLickListener 无法按我的需要工作

java - 为什么我在不同的机器上使用 PBKDF2 得到不同的结果?

c# - 使用node.js解密使用c#加密的数据

C ascii 到 hex 代码

php - 为教程博客创建面包屑菜单导航的技巧

javascript - 使用未定义的常量 - 假定的 id

java - 致命异常 : IntentService[RegIntentService] after upgrading to com. android.support :support-v4:25. 0.1

php - Laravel 独特的电子邮件验证不适用于 mongodb 中的不同字符大小写

javascript - PHP,JS - 记录并保存日期/时间以在浏览器关闭后重新出现