开发者社区> 问答> 正文

java加密的文件,解密代码如何翻译成php语言:报错

这是java 的解密代码

private void xorStream(InputStream in, OutputStream out) throws IOException {

    BufferedInputStream bis = new BufferedInputStream(in);
    BufferedOutputStream bos = new BufferedOutputStream(out);
    byte[] temp = new byte[8192];

    int count = 0;
    byte[] temp1 = this.key.getBytes("ISO-8859-1");
    int len = temp1.length;
    while (count >= 0) {
      count = bis.read(temp);
      if (count > 0) {
        for (int i = 0; i < count; i++) {
          temp[i] = (byte)(temp[i] ^ temp1[(i % len)]);
        }
        bos.write(temp, 0, count);
      }
    }
    bis.close();
    bos.close();

  }

希望厉害的帮我看一下,提供些代码或资料,非常感谢

这是我写的php文件,很多不确定,导致程序不知道怎么调试,还希望大家帮忙指正。

<?php
function getBytes($str) {

    $len = strlen($str);
    $bytes = array();
        for($i=0;$i<$len;$i++) {
            if(ord($str[$i]) >= 128){
                $byte = ord($str[$i]) - 256;
            }else{
                $byte = ord($str[$i]);
            }
        $bytes[] =  $byte ;
    }
    return $bytes;
}
/**
  * 将字节数组转化为String类型的数据
  * @param $bytes 字节数组
  * @param $str 目标字符串
  * @return 一个String类型的数据
  */
      
function toStr($bytes) {
     $str = '';
     foreach($bytes as $ch) {
         $str .= chr($ch);
     }

        return $str;
}

$key = '62C20D8F29A243D3';
$key = iconv("utf-8","iso-8859-1",$key);
$key_byte = getBytes($key);
print_r($key_byte);
$len = count($key_byte);
echo $path = '\upload\2014\1\3\10003\1388737344390[10003]';
echo '<br />';
echo 2^4;
$contents = file_get_contents($path);
$bytes_array = getBytes($contents);
//print_r($bytes_array);
$count = count($bytes_array);
for ($i = 0; $i < $count; $i++) {
  $bytes_array[$i] = $bytes_array[$i] ^ $key_byte[($i % $len)];
}
$str = toStr($bytes_array);
file_put_contents('\2014\1\3\10003\b.jpg',$str);
//print_r($bytes_array);
?>

展开
收起
kun坤 2020-06-14 09:54:07 1037 0
1 条回答
写回答
取消 提交回答
  • 就是几个流操作,php我不会。貌似php可以调C吧。C实现也不难######我也就会php 对于java 不了解 ,我现在知道一个加密文件,按照代码我是不是需要读文件的内容存到一个字符串,再把这个字符串转成byte数组,然后数组里的每个值再分别用异或的方式生成新的值,然后将新的byte数组组合成字符串导入生成新的文件######

    for (int i = 0; i < count; i++) { temp[i] = (byte)(temp[i] ^ temp1[(i % len)]); }

    几个英语单词而已,何难之有。世界上最简单的加密-异或加密。


    ######我第一步就卡在那了,那个byte数组,我不知道什么样的,我在网上找了个php的,但是不知道java 和php的有区别没有,这块的不确定让我不知道接下来我该怎么调试。我会把我写的代码发出来,还希望大哥指点一下我######

    就是拿key和密文做个异或

    ######我把我写的错误代码加上了,大哥帮忙看一下,哪里需要修改还麻烦大哥提出来啊
    2020-06-14 09:54:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载