slowAES 解密为另一个密钥

旧的 slowAES 库有问题。尝试解密时,在 js 中它会生成一个,而在 php 中它会生成另一个。控制台中有很多我无法弄清楚的错误。告诉我出了什么事?如何获得相同的密钥?


<?php

ini_set('display_errors', 1);

ini_set('display_startup_errors', 1);

error_reporting(E_ALL);


$a = "cd36b76f96b103402924bd5f76d3c204";

$b = "680eb6a492f48ea1b342aea7b79e18eb";

$c = "f746749b113236227058bd471f5c91dc";


function toHex($args){

    if(func_num_args() != 1 || !is_array($args)){

        $args = func_get_args();

    }

    $ret = '';

    for($i = 0; $i < count($args) ;$i++)

        $ret .= sprintf('%02x', $args[$i]);

    return $ret;

}


function toNumbers($s){

    $ret = array();

    for($i=0; $i<strlen($s); $i+=2){

        $ret[] = hexdec(substr($s, $i, 2));

    }

    return $ret;

}


function getRandom($min,$max){

    if($min === null)

        $min = 0;

    if($max === null)

        $max = 1;

    return mt_rand($min, $max);

}


function generateSharedKey($len){

    if($len === null)

        $len = 16;

    $key = array();

    for($i = 0; $i < $len; $i++)

        $key[] = getRandom(0,255);

    return $key;

}


function generatePrivateKey($s,$size){

    if(function_exists('mhash') && defined('MHASH_SHA256')){

        return convertStringToByteArray(substr(mhash(MHASH_SHA256, $s), 0, $size));

    }else{

        throw new Exception('cryptoHelpers::generatePrivateKey currently requires mhash');

    }

}


function convertStringToByteArray($s){

    $byteArray = array();

    for($i = 0; $i < strlen($s); $i++){

        $byteArray[] = ord($s[$i]);

    }

    return $byteArray;

}


function convertByteArrayToString($byteArray){

    $s = '';

    for($i = 0; $i < count($byteArray); $i++){

        $s .= chr($byteArray[$i]);

    }

    return $s;

}


include 'cryptovh/aes.php';


$aes = new AES();

$token = $aes->decrypt(toNumbers($c), 16, 2, toNumbers($a), 16, toNumbers($b));

echo toHex($token); // WHAT I HAVE

echo "<br>";

echo "016e9be78dd5130beb5febcd328ff588"; // WHAT I NEED

?>

cryptovh/aes.php 是以下副本:https ://github.com/aleaxit/slowaes/blob/master/php/aes_fast.php


使用这个库: https ://github.com/aleaxit/slowaes


在输出中,我得到了这个标记: dd2f6d60b939b390dc19688babc3873d


慕运维8079593
浏览 82回答 1
1回答

幕布斯7119047

在slowaes/php/aes_fast.php中,方法中 MixColumns 操作的反转mixColumns实现不正确,else-block 必须是:...} else {&nbsp; &nbsp; for ($c = 0; $c < 4; $c++) {&nbsp; &nbsp; &nbsp; &nbsp; $t[&nbsp; &nbsp;$c] = self::$GEX[$state[$c]] ^ self::$GBX[$state[4+$c]] ^ self::$GDX[$state[8+$c]] ^ self::$G9X[$state[12+$c]];&nbsp; &nbsp; &nbsp; &nbsp; $t[ 4+$c] = self::$G9X[$state[$c]] ^ self::$GEX[$state[4+$c]] ^ self::$GBX[$state[8+$c]] ^ self::$GDX[$state[12+$c]];&nbsp; &nbsp; &nbsp; &nbsp; $t[ 8+$c] = self::$GDX[$state[$c]] ^ self::$G9X[$state[4+$c]] ^ self::$GEX[$state[8+$c]] ^ self::$GBX[$state[12+$c]];&nbsp; &nbsp; &nbsp; &nbsp; $t[12+$c] = self::$GBX[$state[$c]] ^ self::$GDX[$state[4+$c]] ^ self::$G9X[$state[8+$c]] ^ self::$GEX[$state[12+$c]];&nbsp; &nbsp; }}...解密需要 MixColumns 操作的逆运算。方法中也有错字invMain,第 3 行,i必须用$i.通过这些更改,可以获得预期的结果,可以在此处进行验证。警告也不再显示。我在这里提出了一个问题。请注意自述文件:该代码更多地用于教学目的。在实践中,应该使用openssl_encrypt/或类似的。openssl_decrypt
打开App,查看更多内容
随时随地看视频慕课网APP