Nachdem die C-Sprache RC4 des zugrunde liegenden Geräts verschlüsselt wurde, warum kann Java RC4 nicht zum Entschlüsseln verwenden, aber die PHP-Programme anderer Leute können erfolgreich entschlüsseln?
PHP中文网
PHP中文网 2017-06-17 09:15:15
0
1
1243

Das zugrunde liegende Gerät ist eine WLAN-Sonde, die regelmäßig Daten an einen Dienst sendet. Diese Dienstadresse empfängt die Daten und verwendet rc4, um sie zu entschlüsseln.
Die zugrunde liegende RC4-Verschlüsselung des Geräts ist in der Sprache C geschrieben.

Java-Empfänger

@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.......");
}

Java RC4-Entschlüsselungsprogramm:
öffentliche Klasse 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);   
}  }


php-Entschlüsselungsprogramm kann erfolgreich entschlüsseln
$json=file_get_contents('php://input');

if ($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");

}

function rc4($pwd, $data)//$pwd key $data muss verschlüsselt werden, string
{

    $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;

}

Die von der Java-Konsole entschlüsselten Daten sind verstümmelt

Warum schlägt die Java-Entschlüsselung fehl? Ich habe verschiedene Kodierungen ausprobiert, um die Daten zu erhalten, aber nach der Entschlüsselung waren sie alle verstümmelt.

PHP中文网
PHP中文网

认证高级PHP讲师

Antworte allen(1)
为情所困

就不能用JCE的RC4来解密吗?另外,两边密钥对不对?

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage