我正在尝试生成在官方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);
})
});
})
我完全束手无策,因此非常欢迎您提供任何帮助。
非常感谢您。
答案 0 :(得分:0)
我看不到您执行任何base 64解码,而密文很明显是base 64编码。
此外,Ionic明确指定了密文使用PKCS#7填充,而您指定了零填充,因此填充方案不匹配。
请注意,AES本身不是传输机制。如果仅通过这种方式进行加密/解密,则攻击者可能会使用填充oracle攻击,并且如果成功,则会丢失邮件的机密性。