Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java加密,PHP解密,反之亦然_Java_Php_Encoding_Blowfish - Fatal编程技术网

java加密,PHP解密,反之亦然

java加密,PHP解密,反之亦然,java,php,encoding,blowfish,Java,Php,Encoding,Blowfish,PHP代码: <?php class Crypter { private $Key; private $Algo; private $Mode; private $Iv; public function __construct() { $this->Algo = MCRYPT_BLOWFISH; $this->Mode = MCRYPT_MODE_CBC; $this->Key =

PHP代码:

<?php
class Crypter {

    private $Key;
    private $Algo;
    private $Mode;
    private $Iv;

    public function __construct() {
        $this->Algo = MCRYPT_BLOWFISH;
        $this->Mode = MCRYPT_MODE_CBC;
        $this->Key = substr('7890', 0, mcrypt_get_key_size($this->Algo, $this->Mode));
    }

    public function Encrypt($data) {

        $iv_size = mcrypt_get_iv_size($this->Algo, $this->Mode);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $this->Iv = $iv;

        $blocksize = mcrypt_get_block_size('blowfish', 'cbc'); // get block size
        $pkcs = $blocksize - (strlen($data) % $blocksize); // get pkcs5 pad length
        $data.= str_repeat(chr($pkcs), $pkcs); // append pkcs5 padding to the data

        $crypt = mcrypt_encrypt($this->Algo, $this->Key, $data, $this->Mode, $this->Iv);
        return base64_encode($crypt);
    }


    public function Decrypt($data) {

        $crypt = base64_decode($data);
        $decrypt = mcrypt_decrypt($this->Algo, $this->Key, $crypt, $this->Mode, $this->Iv);
        $block = mcrypt_get_block_size('blowfish', 'cbc');
        $pad = ord($decrypt[($len = strlen($decrypt)) - 1]);
        return substr($decrypt, 0, strlen($decrypt) - $pad);
    }
}
?>
我有一个场景,其中编码和解码将在两个系统(如JAVA和PHP)之间进行。以上两个类分别是PHP和JAVA的示例

首先,如果我在CBC模式下使用Blowfish算法,我必须提供一个参数IV(初始化向量)。它是随机生成的,长度等于块大小。块大小取决于所使用的加密模式和算法。现在,如果我想用PHP解码一些用JAVA编码的数据,那么首先加密密钥必须与IV(初始化向量)相同

现在在java代码中,IV是随机生成的,如果我在PHP代码中传递相同的IV以及编码字符串(用java编码),那么我在PHP系统中得到一个错误,即IV大小必须与块大小相同

现在,

对于PHP

$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
而对于JAVA

cipher.getBlockSize();
两者都给出了8的大小。但是,当我将JAVA生成的IV传递给PHP时,它给出了错误的
消息:mcrypt_encrypt():IV参数必须与blocksize一样长现在我如何解决这个问题


到目前为止,我理解两个系统中的IV生成过程必须是相同的。具体而言,IV长度必须相同。一点点帮助将不胜感激。谢谢。

加密方法中$blocksize变量的值是多少?
echo$blocksize=mcrypt_get_block_size('blowfish','cbc')这给了我8,当你使用var_dump()你的IV时,你得到的大小是多少?var_dump($IV)给了我这个
字符串(8){f?fÞó“
,但值一直在变化。是的,对于导航器来说,它不是可读字符,但大小与其他字符一致。你的代码似乎正确,我没有发现什么问题。祝你好运。
cipher.getBlockSize();