mcrypt blowfish php与java和.net相比略有不同的结果
发布时间:2020-12-13 22:28:39 所属栏目:PHP教程 来源:网络整理
导读:以下是一些具有更改的键值和有效负载的示例代码: $key = '/4rTInjwg/H/nA==';$key = base64_decode($key);$data = 'val=100|val=200|val=300|val=400|val=500|val=600|val=700|val=800|val=900|';$data.= 'val2=100|val2=200|val2=300|val2=400|val2=500|va
以下是一些具有更改的键值和有效负载的示例代码:
$key = '/4rTInjwg/H/nA=='; $key = base64_decode($key); $data = 'val=100|val=200|val=300|val=400|val=500|val=600|val=700|val=800|val=900|'; $data.= 'val2=100|val2=200|val2=300|val2=400|val2=500|val2=600|val2=700|val2=800|val2=900|'; $data.= 'val3=100|val3=200|val3=300|val3=400|val3=500|val3=600|val3=700|val3=800|val3=900|'; $data.= 'val4=100|val4=200|val4=300|val4=400|val4=500|val4=600|val4=700|val4=800|val4=900|'; $result = base64_encode(mcrypt_ecb(MCRYPT_BLOWFISH,$key,$data,MCRYPT_ENCRYPT)); 这在PHP中加密和解密很好,但Java和.NET提出了不同的值,更糟糕的是,我无法解密Java或.NET的结果.当我尝试解密来自java的值时,我得到一个从正确开始的字符串,但最后到达垃圾.我在Windows XP中使用5.3x,以防有人想知道. 虽然我STFW我已经注意到几个线程,其中最后的评论提到有关base64由于打字问题搞乱结果的事情,我想知道这是不是因为结果如此接近,前50个左右的字符匹配,然后事情去@#$!. 我还阅读了几个关于块大小和填充的线程,但没有人似乎同意填充应该是什么.我真的需要知道Java是否填充文本,默认块大小是什么,pad是什么?见下文: java开发人员正在做: import org.apache.commons.codec.binary.Base64; import java.util.ResourceBundle; import com.sun.crypto.provider.SunJCE; ... snip ... StringBuffer ourTransferBuffer = new StringBuffer(s); byte abyte0[] = Base64.decodeBase64(encryptionKey); SunJCE sunjce = new SunJCE(); Security.addProvider(sunjce); SecretKeySpec secretkeyspec = new SecretKeySpec(abyte0,"Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(1,secretkeyspec); byte abyte1[] = cipher.doFinal(ourTransferBuffer.toString().getBytes()); s = Base64.encodeBase64String(abyte1); return s; ... snip ... 我已经花了太多时间在这上面,任何人都有任何想法吗?谢谢. 解决方法
弄清楚了,简单的pkcs5填充修复了这个问题.
... snip ... $data = 'val=100|val=200|val=300|val=400|val=500|val=600|val=700|val=800|val=900|'; $data.= 'val2=100|val2=200|val2=300|val2=400|val2=500|val2=600|val2=700|val2=800|val2=900|'; $data.= 'val3=100|val3=200|val3=300|val3=400|val3=500|val3=600|val3=700|val3=800|val3=900|'; $data.= 'val4=100|val4=200|val4=300|val4=400|val4=500|val4=600|val4=700|val4=800|val4=900|'; $blocksize = mcrypt_get_block_size('blowfish','ecb'); // get block size $pkcs = $blocksize - (strlen($data) % $blocksize); // get pkcs5 pad length $data.= str_repeat(chr($pkcs),$pkcs); // append pkcs5 padding to the data // encrypt and encode $res = base64_encode(mcrypt_ecb(MCRYPT_BLOWFISH,MCRYPT_ENCRYPT)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |