2013-03-27 5 views
0

Tom Wu의 jsbn 라이브러리를 사용하여 JavaScript에서 데이터를 암호화하는 데 문제가 있습니다.jsbn을 사용하여 Javascript에서 데이터를 올바르게 암호화 할 수 없습니다.

PHP에서 데이터를 해독하려고 시도 할 때 openssl_private_decrypt가 false를 반환합니다.

공개 키를 인코딩하는 방법이 가능합니까?

다음은 데이터를 암호화하는 JavaScript 코드입니다.

function encryptData(data) 
{ 
    var $oDataEncrypted = ""; 

    // Do not forget to escape the lines: 
    var $pem = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoEu5N3x/6aK7E4A9f+7AV/A9T\nT6zu5zdM6L+6XViYC6JssiV1JVE/x/5yd4mVrG8CFkOaF9QqOIFFnQnQw+O+5B/3\nRdoIAssExytGyjY7k11u9jKZI+xRslCxQRoQnUzEVE29Vr6TWUwpxrnpsl+z/5ej\n+Yk8UsMJRkBvmSMdDwIDAQAB\n-----END PUBLIC KEY-----"; 

    // Create the RSA object. 
    var $key = RSA.getPublicKey($pem); 

    $oDataEncrypted = RSA.encrypt(data, $key); 

    return $oDataEncrypted; 
} 

하나의 생각은 "\ n"이고 PHP와 달리 JavaScript는 자동으로 구문을 이해하지 못하거나 라이브러리가 이해하지 못할 수 있습니다.

전에서 얻은 최신 파일을 사용하고 있습니다 :에 (테스트를위한 자바 스크립트 팀의 비주얼 스튜디오를 사용하여) 암호화 된 값을 테스트, 나는 복사를 들어

http://www-cs-students.stanford.edu/~tjw/jsbn/

https://github.com/ziyan/javascript-rsa/tree/master/src

을 붙여 넣을 내 PHP 파일. openssl_private_decrypt()에 내 키를 전달하고 FALSE를 반환합니다. 슬프게도 openssl_private_decrypt는 이유를 반환하지 않고 JavaScript 코드가 값을 반환하는 것으로 나타나며 오류가 발생하거나 반환되지 않습니다.

내 생각 엔 공개 키가있는 것 같지만 분명히 문제가 다른 곳에있을 수 있습니다.

답변

1

후회를 위해 답을 알려 드리겠습니다. 대답은 내 얼굴에 조금 있었지만, 단지 그것을 실현하기에는 너무 조밀했습니다.

JavaScript는 base-64로 데이터를 인코딩하므로 PHP가 인식하기 전에 데이터를 디코딩해야합니다. 따라서 PHP 측면에서 간단한 추가가 필요합니다.

if(!openssl_private_decrypt(base64_decode($dataArg1), $sensitiveData, $key)) 

나는 base64_decode()에 데이터 인수를 래핑했습니다.