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.
Bolehkah kita menggunakan RC4 JCE untuk menyahsulit? Juga, adakah kunci pada kedua-dua belah betul?