ECB加密
ECB模式的全称是Electronic CodeBook模式,将明文分组加密后直接成为密文分组,而密文则是由明文分组直接拼接而成。
加密模式如图:
!()[/img/ecb1.png]
那就是
- 分组
- 分组加密
- 密文组合
三步完成
既然如此,我们在已知一部分明文的密文的情况下,我们就可以知道任意明文的密文实验
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253<?php/*** Created by PhpStorm.* User: Da7ura_N0ir* Date: 2017/11/8* Time: 15:03*/function AES($data){// 要加密或解密的数据$privateKey = "12345678123456781234567812345678";// 加密密钥// MCRYPT_RIJNDAEL_128->加密算法$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_ECB);// MCRYPT_MODE_ECB->加密或解密的模式$encryptedData = (base64_encode($encrypted));return $encryptedData;}function DE__AES($data){$privateKey = "12345678123456781234567812345678";$encryptedData = base64_decode($data);$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_ECB);$decrypted = rtrim($decrypted, "\0") ;return $decrypted;}if (@$_GET['a']=='reg'){setcookie('uid', AES('9'));setcookie('username', AES($_POST['username']));header("Location: http://127.0.0.1/test/ecb.php");exit();}if (@!isset($_COOKIE['uid'])||@!isset($_COOKIE['username'])){echo '<form method="post" action="ecb.php?a=reg">Username:<br><input type="text" name="username"><br>Password:<br><input type="text" name="password" ><br><br><input type="submit" value="注册"></form> ';}else{$uid = DE__AES($_COOKIE['uid']);//echo 'uid='.$uid.'<br>username='.$_COOKIE['username'].'<br>';if ( $uid != '4'){echo 'uid:' .$uid .'<br/>';echo 'Hi ' . DE__AES($_COOKIE['username']) .'<br/>';echo 'You are not administrotor!!';}else {echo "Hi you are administrotor!!" .'<br/>';echo 'Flag is ****';}}?>
这里我们在不知道秘钥privateKey
的情况下,可以直接找到4
的的加密密文
脚本
我们这里是16个字节为一个组,所以我们用了16个a
做前缀,后面只需要把加密结果取出来,分成两组,第二组就是我们附加的num
的值,
然后再把uid
修改为这个值,便可以得到