2013-06-30 4 views
1

몇 가지 방법을 시도했지만 작동하지 않습니다.Javascript 문자열을 유니 코드로 인코딩하고이를 PHP의 utf-8로 디코딩하는 방법은 무엇입니까?

이제 알아낼 수없는 두 가지 문제가 있습니다.

    난 다음에 전송, 내가 base64로 인코딩 된 자바 스크립트를 사용하여 RC4의 문자열을 암호화
  1. PHP

    $value = iconv('UCS-2LE', 'UTF-8', $_GET["value"]);를 사용하여 유니 코드 및 디코드에 자바 스크립트 문자열을 인코딩하는 방법을 알아낼 수 없습니다
  2. PHP. 결과가 왜곡되었습니다. 나는 이유를 모른다!

어디에서 시작해야합니까?

+1

유니 코드는 인코딩이 아닙니다. 아마도 UTF-16의 변형을 의미 할 것입니다 ... – dda

답변

1

나는이 문제를 해결했으며 좋은 방법이라고 생각하고 공유하고 싶습니다. Javascript 개체가 USC-2로 인코딩됩니다. 그러나 RC4 바이트로 작업하고 있습니다. 먼저, 문자열을 bytes 배열로 전송합니다.
var plainValueArray = TextEncoder ("utf-16"). encode (value); var keyArray = TextEncoder ("utf8"). 인코딩 (RC4Key); 둘째로, RC4 VAR의 RC4 = { 토굴 아래와 같이 : 함수 (rawBytes, keyBytes) {

var i; 
    var sBuffer=new ArrayBuffer(256); 
    var kBuffer=new ArrayBuffer(256); 
    var cipherBuffer=new ArrayBuffer(rawBytes.length); 
    var s=new Uint8Array(sBuffer);//box[] 
    var k=new Uint8Array(kBuffer);//key[] 
    var cipherBytes=new Uint8Array(cipherBuffer); 
    for(i=0;i<rawBytes.length;i++) 
    { 
     cipherBytes[i]=0x00; 
    } 
    for(i=0;i<256;i++) 
    { 
     k[i]=keyBytes[i%keyBytes.length]; 
     s[i]=i; 
    } 
    var j=0; 
    for(i=0;i<256;i++) 
    { 
     j=(j+s[i]+k[i])%256; 
     x=s[i]; 
     s[i]=s[j]; 
     s[j]=x; 
    } 
    i=0; 
    j=0; 
    for(var y=0;y<rawBytes.length;y++) 
    { 
     i=(i+1)%256; 
     j=(j+s[i])%256; 
     x=s[i]; 
     s[i]=s[j]; 
     s[j]=x; 
     key=s[(s[i]+s[j])%256] 
     cipherBytes[y]=key^rawBytes[y]; 
    } 
    return cipherBytes; 

} 

};