php-AES/CBC/PKCS7Padding加密的实现

php5模式

https://github.com/gunnzhao/AES-CBC-PKCS7Padding-/blob/master/AesCrypter.php

public function encrypt($orig_data) {
        $encrypter = mcrypt_module_open($this->algorithm, ‘‘,
            $this->mode, ‘‘);
        $orig_data = $this->pkcs7padding(
            $orig_data, mcrypt_enc_get_block_size($encrypter)
        );
        mcrypt_generic_init($encrypter, $this->key, substr($this->key, 0, 16));
        $ciphertext = mcrypt_generic($encrypter, $orig_data);
        mcrypt_generic_deinit($encrypter);
        mcrypt_module_close($encrypter);
        return base64_encode($ciphertext);
    }

  

php7模式:

$cipher = "aes-256-cbc";
        $key = hash(‘sha256‘,   ‘@parkingwang.com‘ , true);
        $encrypted = openssl_encrypt(json_encode($data), ‘AES-256-CBC‘, $key, 1, substr($key, 0, 16));
        $encrypt_msg = base64_encode($encrypted);

  

注意:加密后的字节码使用Base64转换成字符串

  • 加密模式: CBC
  • 填充模式: PKCS7Padding
  • 加密密钥: 用户密钥 SHA256 的32 bytes
  • AES IV : 加密密钥的前 16 bytes
  • Base 64: Base64.DEFAULT

加密过程:

加密:padding->CBC加密->base64编码

解密:base64解码->CBC解密->unpadding

AES加密结果基准测试:

用户密钥:

909ed2d5fcf907c79fb9aa341a98febb65291c39

明文:

AABBCC测试数据

密文:

noMrTUS2A0YTcYaaPQSy9peqF6Mv/faMkI4yYHDvKjw=

原文地址:https://www.cnblogs.com/akidongzi/p/9608022.html

时间: 2024-08-02 17:01:44

php-AES/CBC/PKCS7Padding加密的实现的相关文章

AES/CBC/PKCS7Padding加密方式

在网上找了大半天资料,终于找到一个可以用的 public static class AES { // 算法名称 final static String KEY_ALGORITHM = "AES"; // 加解密算法/模式/填充方式 final static String algorithmStr = "AES/CBC/PKCS7Padding"; // private static Key key; private static Cipher cipher; boo

java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法

在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里面支持PKCS7Padding填充. 説辣么多不如上代码: public class AESUtil { /** * Encodes a String in AES-256 with a given key * * @param context * @param password * @param

Java 使用AES/CBC/PKCS7Padding 加解密字符串

介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充,需要用到bouncycastle组件来实现 所以需要一个jar 来支持.bcprov-jdk16-146.jar 下载地址:http://central.maven.org/maven2/org/bouncycastle/bcprov-jdk16/1.46/bcprov-jdk16-1.46.jar

python AES CBC模式加密

今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 http://tool.chacuo.net/cryptaes,https://tools.lami.la/jiami/aes,以下代码加密后结果与这两个网页加密后一样. 这里有几点要注意,key的长度要是16,24或32,text的长度要是16的倍数,不满足长度都会补全,补全的字符可以自己定义,比如key补全不一定要"

php实现AES/CBC/PKCS5Padding加密解密

<?php class MagicCrypt { private $iv = "0102030405060708";//密钥偏移量IV private $encryptKey = "58e15e87488a47c9";//AESkey //加密 public function encrypt($encryptStr) { $localIV = $this->iv; $encryptKey = $this->encryptKey; //Open mo

linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法

用mapreduce做数据清洗的时候,需要对数据进行解密,加密方法是:AES/CBC/PKCS7Padding,由于java本身不支持,需要添加依赖,用的依赖是: 1 <dependency> 2 <groupId>org.bouncycastle</groupId> 3 <artifactId>bcprov-jdk15on</artifactId> 4 <version>1.56</version> 5 </dep

解决AES算法CBC模式加密字符串后再解密出现乱码问题

问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi?AESEncryptUtil 库,找到问题后,在这里复现不太方便,这里使用 python 进行复现,可以方便复现. #!/usr/bin/env python #coding=utf-8 from Crypto.Cipher import AES ? PADDING = '\0' if __name__ == "__main__":? ?

AES五种加密模式(CBC、ECB、CTR、OCF、CFB)

分组密码有五种工作体制:1.电码本模式(Electronic Codebook Book (ECB)):2.密码分组链接模式(Cipher Block Chaining (CBC)):3.计算器模式(Counter (CTR)):4.密码反馈模式(Cipher FeedBack (CFB)):5.输出反馈模式(Output FeedBack (OFB)). 以下逐一介绍一下: 1.电码本模式(Electronic Codebook Book (ECB)     这种模式是将整个明文分成若干段相同

通过Jni实现AES的CBC模式加密解密

AES加密方式基本实现,出现一个问题就是代码的安全性.我们知道java层代码很容易被反编译,很有可能泄漏我们加密方式与密钥 内容,那我们该怎么办呢?我们可以使用c/c++实现加密,编译成So库的形式,可供java实现调用,这样就大大增强程序安全性,因为so反编译结果是 arm指令,没有java中smali那么易懂.完全使用c/c++实现可能会比较麻烦,其实我们也可以简化一部分,只将密钥使用jni实现,其它还是用java实现,这样会简单一些,下面是具体操作: (1)新建项目aes 在java类中添