Intereting Posts
Кнопка регистрации / регистрации не работает (PHP AND AJAX) Можно ли печатать файлы с помощью PHP? Управление размером HTML5 DIV Почему я не могу использовать сеансы в hook CodeIgniter Неустранимая ошибка HelperSet не найдена при настройке Doctrine Console (с помощью CodeIgniter) Как отправить электронное письмо в utf8 Запись строки в файл и принудительная загрузка в PHP Мне нужен совет, разрабатывающий чувствительную систему передачи / хранения / шифрования данных PHP: тестирование существования ячейки в многомерном массиве «PDOException» с сообщением «SQLSTATE : общая ошибка: 2014 Не удается выполнить запросы, в то время как другие небуферизованные запросы активны использовать .htaccess с встроенным сервером php5.4 PHP preg_replace () – Проблемы с памятью. Альтернатива? Magento получает корзину за единицу товара вкл. налог Экспорт PHP в Excel приводит к неправильному формату и нежелательным знакам REGEX – PHP Получить только полужирный раздел в строке

Javascript + PHP-шифрование с помощью pidCrypt

Я работал над попыткой реализовать механизм шифрования для передачи защищенной информации на моем сайте. Мой хозяин взимает дополнительную плату за SSL, и я не готов к дополнительным денежным обязательствам.

Я попытался использовать pidCrypt для шифрования значений на стороне клиента через javascript. Затем я попробовал несколько методов для дешифрования на стороне PHP. По какой-то причине данные просто искажаются.

Может кто-то указать, что я делаю неправильно? Или я должен использовать другую библиотеку javascript для шифрования? Любой совет?

Вот код javascript, который извлекает текст для шифрования из ввода на странице и открытого ключа из скрытой текстовой области на странице.

$(document).ready(function() { $('button').click(function() { var dataToSend = new Object(); var input = $('input[name=textToEncrypt]').val(); var public_key = $('textarea[name=publicKey]').val(); var params = certParser(public_key); var key = pidCryptUtil.decodeBase64(params.b64); //new RSA instance var rsa = new pidCrypt.RSA(); //RSA encryption //ASN1 parsing var asn = pidCrypt.ASN1.decode(pidCryptUtil.toByteArray(key)); var tree = asn.toHexTree(); //setting the public key for encryption rsa.setPublicKeyFromASN(tree); var t = new Date(); // timer crypted = rsa.encrypt(input); dataToSend.unencrypted = input; dataToSend.textToDecrypt = pidCryptUtil.fragment(pidCryptUtil.encodeBase64(pidCryptUtil.convertFromHex(crypted)),64); $('body').append(dataToSend.textToDecrypt); $.getJSON('engine.php', dataToSend, function(data) { var items = []; $.each(data, function(key, val) { items.push('<li id="' + key + '">' + key + ': ' + val + '</li>'); }); $('<ul/>', { 'class': 'my-new-list', html: items.join('') }).appendTo('body'); }); }); }); 

Это мой код engine.php, который должен расшифровать значение. Обратите внимание, что я попробовал несколько разных способов из разных примеров.

 <?php require_once 'private/keys.php'; function EncryptData($source) { /* * NOTE: Here you use the $pub_key value (converted, I guess) */ $key = $DEkeys->pubKey; openssl_public_encrypt($source,$crypttext,$key); return(base64_encode($crypttext)); } function DecryptData($source) { /* * NOTE: Here you use the returned resource value */ $decoded_source = base64_decode($source); openssl_private_decrypt($decoded_source,$newsource,$DEkeys->privKey); return($newsource); } function EncryptData2($source) { $fp=fopen("/pathtokey/public.pem","r"); $pub_key=fread($fp,8192); fclose($fp); openssl_get_publickey($pub_key); /* * NOTE: Here you use the $pub_key value (converted, I guess) */ openssl_public_encrypt($source,$crypttext,$pub_key); return(base64_encode($crypttext)); } function DecryptData2($source) { #print("number : $number"); $fp=fopen("/pathtokey/private.pem","r"); $priv_key=fread($fp,8192); fclose($fp); // $passphrase is required if your key is encoded (suggested) $res = openssl_get_privatekey($priv_key); /* * NOTE: Here you use the returned resource value */ $decoded_source = base64_decode($source); openssl_private_decrypt($decoded_source,$newsource,$res); return($newsource); } $out = new stdClass; $out->hello = 'hello, world!'; if(!empty($_GET["textToDecrypt"])) { $out->raw = $_GET['textToDecrypt']; $out->unencrypted = $_GET['unencrypted']; if($DEkeys->privKey == false) { $out->error = 'Could not read private key'; } $out->success = openssl_private_decrypt(base64_decode($out->raw), $decrypted, $DEkeys->privKey); $out->decrypted = $decrypted; $out->dec2 = DecryptData2($out->raw); $out->test1 = EncryptData2('testing'); $out->test2 = DecryptData2($out->test1); } else { $out->nondata = $_GET['textToDecrypt']; } echo json_encode($out); 

Когда я ввожу «тест» для значения для дешифрования, PHP показывает: – расшифрованный: dGVzdA == – dec2: dGVzdA ==

Таким образом, ни функции openssl_private_decrypt (), ни функции DecryptData2 () не будут правильно расшифровывать значения. EncryptData2 () и DecryptData2 () будут работать вместе.

Возможно ли, что у меня что-то малое? Любой совет?

Edit: Вот команды, которые я использовал для создания ключей –

Это создает закрытый ключ:

  openssl genrsa -out private.pem 1024 

Это создает открытый ключ:

  openssl rsa -in private.pem -pubout > public.pem 

Solutions Collecting From Web of "Javascript + PHP-шифрование с помощью pidCrypt"