搜索
首页后端开发php教程php AES加密兼容net

这几天做一个php aes加密然后到.net解密的程序,做了pkcs7的补码,密文到.net后仍然解密失败,提示填充无效,无法被移除,通过检查程序,原来是加密向量写错了。在.net中加密向量的格式为数组,在php中应转为带斜杠的字符串,我在转换是多删掉了一个0。下面看程序,设置自己的key和iv后就可以使用这些程序。

class AESMcrypt{


    /** 
     * 设置默认的加密key 32位
     * @var str 
	 * 为了保密省略后半部分
     */ 
    private static $defaultKey = "1A426B316FB648...........";

    /** 
     * 设置默认加密向量
     * @var str
	 * 为了保密省略后半部分
     */
	 
	//在.net中的格式为
	//$iv='{ 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF............}';
	
    private $iv = "\x12\x34\x56\x78\x90\xAB\xCD\xEF\...........";
     
    /** 
     * 设置加密算法 
     * @var str 
     */ 
    private $cipher; 
     
    /** 
     * 设置加密模式 
     * @var str 
     */ 
    private $mode; 
     
    public function __construct($cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC){ 
        $this->cipher = $cipher; 
        $this->mode = $mode; 
    } 
     
    /** 
     * 对内容加密,注意此加密方法中先对内容使用padding pkcs7,然后再加密。 
     * @param str $content    需要加密的内容 
     * @return str 加密后的密文 
     */ 
    public function encrypt($content){ 
        if(empty($content)){
            return null; 
        }
		
		$srcdata = $this->addPkcs7Padding($content);
        return mcrypt_encrypt($this->cipher, $this->getSecretKey(), $srcdata, $this->mode, $this->iv);
    }
	
	/**
	 * pkcs7补码
	 *
	 * @param string $string  明文
	 *
	 * @return String
	 */ 
	function addPkcs7Padding($string) {
		$blocksize = mcrypt_get_block_size($this->cipher, $this->mode);
		$len = strlen($string); //取得字符串长度
		$pad = $blocksize - ($len % $blocksize); //取得补码的长度
		$string .= str_repeat(chr($pad), $pad); //用ASCII码为补码长度的字符, 补足最后一段
		return $string;
	}

    /** 
     * 对内容解密,注意此加密方法中先对内容解密。再对解密的内容使用padding pkcs7去除特殊字符。 
     * @param String $content    需要解密的内容 
     * @return String 解密后的内容 
     */ 
    public function decrypt($content){ 
        if(empty($content)){ 
            return null; 
        } 

        $content = mcrypt_decrypt($this->cipher, $this->getSecretKey(), $content, $this->mode, $this->iv); 
        //$block = mcrypt_get_block_size($this->cipher, $this->mode); 
        $pad = ord($content[($len = strlen($content)) - 1]); 
        return substr($content, 0, strlen($content) - $pad); 
    }
	
	public function getSecretKey()
	{
		return self::$defaultKey;
	}
}

以上就介绍了php AES加密兼容net,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用java的String.valueOf()函数将基本数据类型转换为字符串使用java的String.valueOf()函数将基本数据类型转换为字符串Jul 24, 2023 pm 07:55 PM

使用Java的String.valueOf()函数将基本数据类型转换为字符串在Java开发中,当我们需要将基本数据类型转换为字符串时,一种常见的方法是使用String类的valueOf()函数。这个函数可以接受基本数据类型的参数,并返回对应的字符串表示。在本文中,我们将探讨如何使用String.valueOf()函数进行基本数据类型转换,并提供一些代码示例来

怎么把char数组转string怎么把char数组转stringJun 09, 2023 am 10:04 AM

char数组转string的方法:可以通过赋值来实现,使用{char a[]=" abc d\0efg ";string s=a;}语法,让char数组对string直接赋值,执行代码即可完成转换。

使用java的String.length()函数获取字符串的长度使用java的String.length()函数获取字符串的长度Jul 25, 2023 am 09:09 AM

使用Java的String.length()函数获取字符串的长度在Java编程中,字符串是一种非常常见的数据类型,我们经常需要获取字符串的长度,即字符串中字符的个数。在Java中,我们可以使用String类的length()函数来获取字符串的长度。下面是一个简单的示例代码:publicclassStringLengthExample{publ

Java String中的split方法如何使用Java String中的split方法如何使用May 02, 2023 am 09:37 AM

String中split方法使用String的split()方法用于按传入的字符或字符串对String进行拆分,返回拆分之后的数组。1、一般用法用一般的字符,例如@或,等符号做分隔符时:Stringaddress="上海@上海市@闵行区@吴中路";String[]splitAddr=address.split("@");System.out.println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3

java的String类如何使用java的String类如何使用Apr 19, 2023 pm 01:19 PM

一、认识String1.JDK中的String首先我们看看JDK中的String类源码,它实现了很多接口,可以看到String类被final修饰了,这就说明String类不可以被继承,String不存在子类,这样所有使用JDK的人,用到的String类都是同一个,如果String允许被继承,每个人都可以对String进行扩展,每个人使用的String都不是同一个版本,两个不同的人使用相同的方法,表现出不同的结果,这就导致代码没办法进行开发了继承和方法覆写在带来灵活性的同时,也会带来很多子类行为不

使用java的String.toLowerCase()函数将字符串转换为小写使用java的String.toLowerCase()函数将字符串转换为小写Jul 24, 2023 pm 11:52 PM

String.toLowerCase()函数是Java中一个非常有用且常见的字符串处理函数,它可以将一个字符串转换为小写形式。在本文中,我们将介绍该函数的使用方法,并给出一些相关的代码示例。首先,让我们来看一下String.toLowerCase()函数的基本语法。它没有任何参数,只需要调用它即可。下面是示例代码:Stringstr="Hel

Golang函数的byte、rune和string类型转换技巧Golang函数的byte、rune和string类型转换技巧May 17, 2023 am 08:21 AM

在Golang编程中,byte、rune和string类型是非常基础、常见的数据类型。它们在处理字符串、文件流等数据操作时发挥着重要作用。而在进行这些数据操作时,我们通常需要对它们进行相互的转换,这就需要掌握一些转换技巧。本文将介绍Golang函数的byte、rune和string类型转换技巧,旨在帮助读者更好地理解这些数据类型,并能够熟练地在编程实践中应用

java中string是什么意思java中string是什么意思Mar 01, 2023 pm 07:11 PM

在java中,string是字符串的意思,是一种类类型(class type),它代表了一串字符序列;Java没有内置的字符串类型,而是在标准Java类库中提供了一个String类来创建和操作字符串。在Java中定义一个字符串最简单的方法是用双引号把它包围起来;也可以通过创建String类的实例来定义字符串。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境