openssl java aes_php7 openssl_decrypt AES的ECB与CBC加解密

php7.2版本用openssl_encrypt代替mcrypt_encrypt,导致以往自己写的Aes加密类不能用。这次项目客户端用的是AES-128-ECB加密,我用在线AES工具来测试,发现自己写的加解密方法得到的值不一样。而最终发现是加密的key不是16位长,导致ios客户端与服务器php的加解密不一致。后商讨key为16位长,遂问题解决。下面是AES-128-ECB加密类;cla...
摘要由CSDN通过智能技术生成

php7.2版本用openssl_encrypt代替mcrypt_encrypt,导致以往自己写的Aes加密类不能用。

这次项目客户端用的是 AES-128-ECB 加密,我用在线AES工具来测试,发现自己写的加解密方法得到的值不一样。而最终发现是加密的key不是16位长,导致ios客户端与服务器php的加解密不一致。后商讨key为16位长,遂问题解决。下面是 AES-128-ECB 加密类;

class Aes

{

//密钥 须是16位

public $key ;

/**

* 解密字符串

* @param string $data 字符串

* @return string

*/

public function __construct()

{

$this->key = '1234567890123456';

}

public function decode($str)

{

return openssl_decrypt(base64_decode($str),"AES-128-ECB",$this->key,OPENSSL_RAW_DATA);

}

/**

* 加密字符串

* @param string $data 字符串

* @return string

*/

public function encode($str)

{

return base64_encode(openssl_encrypt($str,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`AES_ecb_encrypt()` 函数封装了AES算法中的ECB模式密操作,它可以对输入的数据进行密处理并输出密后的数据。而解密则需要使用 `AES_ecb_decrypt()` 函数,它封装了AES算法中的ECB模式解密操作,可以对密后的数据进行解密处理并输出解密后的数据。 使用该函数需要先引入OpenSSL库的头文件 `openssl/aes.h`,并初始化一个 `AES_KEY` 结构体,然后使用 `AES_set_encrypt_key()` 函数设置密密钥。接下来,可以使用 `AES_ecb_encrypt()` 函数对数据进行密处理,该函数的参数包括输入的数据、输出的数据、数据长度和密密钥。最后,需要释放密钥,使用 `AES_cleanup()` 函数即可。 解密的过程与密类似,不同的是需要使用 `AES_set_decrypt_key()` 函数设置解密密钥,然后使用 `AES_ecb_decrypt()` 函数对密后的数据进行解密处理,即可输出解密后的数据。 示例代码如下: ```c #include <openssl/aes.h> #include <string.h> int main() { unsigned char plaintext[] = "Hello, world!"; unsigned char ciphertext[16], decryptedtext[16]; AES_KEY key; AES_set_encrypt_key("0123456789abcdef", 128, &key); // 设置密密钥 AES_ecb_encrypt(plaintext, ciphertext, &key, AES_ENCRYPT); // 进行AES_set_decrypt_key("0123456789abcdef", 128, &key); // 设置解密密钥 AES_ecb_decrypt(ciphertext, decryptedtext, &key, AES_DECRYPT); // 进行解密 AES_cleanup(&key); // 释放密钥 if (strcmp(plaintext, decryptedtext) == 0) { printf("Decryption successful!\n"); } else { printf("Decryption failed!\n"); } return 0; } ``` 注意:该函数只支持对固定长度的数据进行密和解密,如果需要对变长数据进行密和解密,需要使用其他模式,如CBC、CTR等。同时,ECB模式存在一些安全问题,不建议使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值