![](/img/trans.png)
[英]Cross platform (php to C# .NET) encryption/decryption with Rijndael Part 2
[英]Php Android cross platform 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);
}
但是數據顯示不正確...任何想法?
你陷入了mcrypt陷阱 。
MCRYPT_RIJNDAEL_256
不是AES-256,它是Rijndael的256位塊大小變體。 即使使用256位密鑰,AES也始終為128位塊大小。
請改用libsodium 。 有Android,iOS和PHP的綁定。 如果升級到PHP 7.2或更高版本,則應該已經安裝它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.