离子AES256-PHP AES-256-CBC

时间:2018-08-09 21:56:19

标签: php ionic-framework encryption aes

我正在尝试生成在官方Ionic库'AES256'中替代的消息,并在我的PHP服务器中将其解密。

应用程序通过URL将IV发送到服务器,服务器已经知道密钥,然后服务器尝试解密该消息并发回解密的消息。

服务器端接收.../api/users.json?apikey=1234567890123456&encdata=zx6Jyh8nfunTvN7+TKG34g==

    $key = hex2bin('96955281571734888210331492195226');

    echo "key: ".bin2hex($key).", encdata: ".$_GET['encdata'].", apikey: ".$_GET['apikey'];
    $out = openssl_decrypt($_GET['encdata'], 'AES-256-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $_GET['apikey']);
    $out = bin2hex($out);
    fwrite($log, $out);

    echo json_encode($out);

客户端生成:

this.encrypt(this.secureKey, this.secureIV, data).then((encdata) => {

    console.log('HTTP request - Sending: '+ url + '&encdata=' + encdata.toString());
    this.http.get(url + '&encdata=' + encdata).map(res => res.json()).subscribe(encdataserver => {
      console.log('HTTP request - Received: '+JSON.stringify(encdataserver));

      this.decrypt(this.secureKey, this.secureServerPreKey, encdataserver).then((data)=>{      
        resolve(data);
      })

    });

  })

我完全束手无策,因此非常欢迎您提供任何帮助。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我看不到您执行任何base 64解码,而密文很明显是base 64编码。

此外,Ionic明确指定了密文使用PKCS#7填充,而您指定了零填充,因此填充方案不匹配。

请注意,AES本身不是传输机制。如果仅通过这种方式进行加密/解密,则攻击者可能会使用填充oracle攻击,并且如果成功,则会丢失邮件的机密性。