cari

Rumah  >  Soal Jawab  >  teks badan

Selepas bahasa C peranti asas RC4 disulitkan, mengapa Java tidak boleh menggunakan rc4 untuk menyahsulit, tetapi program PHP orang lain boleh menyahsulit dengan jayanya?

Peranti asas ialah siasatan wifi yang kerap menolak data ke perkhidmatan alamat perkhidmatan ini menerima data dan menggunakan rc4 untuk menyahsulitnya.
Penyulitan rc4 peranti asas ditulis dalam bahasa C.

penerima java

@RequestMapping("/acc")
public void acc1(HttpServletRequest request,HttpServletResponse response) throws Exception{
    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    System.out.println(sdf.format(new Date())+"-->post begin.......");
     BufferedReader reader = new BufferedReader(
             new InputStreamReader(request.getInputStream(),"UTF-8"));
     String line=null;
     StringBuilder buffer = new StringBuilder();
     while((line = reader.readLine())!=null){
             buffer.append(line);
           }
     System.out.println("recive:   "+buffer.toString());
     String key = buffer.toString().substring(0, 16);
     String content =  buffer.toString().substring(16);
     System.out.println("before 16 string:    "+key);
     System.out.println("content :    "+content);
     System.out.println("decrypt :       "+RC4.HloveyRC4(content, key));
     
    System.out.println(sdf.format(new Date())+"-->post end.......");
}

program penyahsulitan java rc4:
kelas awam RC4 {

public static String HloveyRC4(String aInput,String aKey) {   
    int[] iS = new int[256];   
    byte[] iK = new byte[256];   
    for (int i=0;i<256;i++)   
        iS[i]=i;   
    int j = 1;   
    for (short i= 0;i<256;i++) {   
        iK[i]=(byte)aKey.charAt((i % aKey.length()));   
    }   
    j=0;   
    for (int i=0;i<255;i++){   
        j=(j+iS[i]+iK[i]) % 256;   
        int temp = iS[i];   
        iS[i]=iS[j];   
        iS[j]=temp;   
    }   
    int i=0; j=0;   
    char[] iInputChar = aInput.toCharArray();   
    char[] iOutputChar = new char[iInputChar.length];   
    for(short x = 0;x<iInputChar.length;x++) {   
        i = (i+1) % 256;   
        j = (j+iS[i]) % 256;   
        int temp = iS[i];   
        iS[i]=iS[j];   
        iS[j]=temp;   
        int t = (iS[i]+(iS[j] % 256)) % 256;   
        int iY = iS[t];   
        char iCY = (char)iY;   
        iOutputChar[x] =(char)( iInputChar[x] ^ iCY) ;      
    }   
    return new String(iOutputChar);   
}  }


program penyahsulitan php boleh menyahsulit dengan jayanya
$json=file_get_contents('php://input');

jika ($json) {

$time_str=date('YmdHms',time());

//开始RC4解密
$key = substr($json,0,16);                               
$json = rc4($key, substr($json,16));

$json=mb_convert_encoding($json,"UTF-8","auto");

}

fungsi rc4($pwd, $data)//$kunci $pwd $data perlu disulitkan rentetan
{

    $key[] ="";
    $box[] ="";
    $cipher="";
    $pwd_length = strlen($pwd);
    $data_length = strlen($data);
 
    for ($i = 0; $i < 256; $i++)
    {
        $key[$i] = ord($pwd[$i % $pwd_length]);
        $box[$i] = $i;
    }
 
    for ($j = $i = 0; $i < 256; $i++)
    {
        $j = ($j + $box[$i] + $key[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
 
    for ($a = $j = $i = 0; $i < $data_length; $i++)
    {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
 
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
 
        $k = $box[(($box[$a] + $box[$j]) % 256)];
        $cipher .= chr(ord($data[$i]) ^ $k);
    }
   // var_dump($cipher);
    //exit();
    return $cipher;

}

Data yang dinyahsulit oleh konsol java bercelaru

Mengapa penyahsulitan java gagal? Saya mencuba pengekodan yang berbeza untuk mendapatkan data, tetapi semuanya bercelaru selepas penyahsulitan.

PHP中文网PHP中文网2759 hari yang lalu1290

membalas semua(1)saya akan balas

  • 为情所困

    为情所困2017-06-17 09:17:15

    Bolehkah kita menggunakan RC4 JCE untuk menyahsulit? Juga, adakah kunci pada kedua-dua belah betul?

    balas
    0
  • Batalbalas