RSA şifreleme / şifre çözme Javascript ile uyumlu ve PHP

6 Cevap php

Ben JavaScript şifrelemek ve daha sonra PHP şifresini istiyorum. Orada Javascript ve PHP için RSA uygulamaları vardır ama onlar uyumlu değildir. Ben JavaScript ile şifrelenmiş şeyi doğru PHP şifresini çözemez.

Herkes JavaScript ve PHP ile hem de çalışacak bir kütüphane / kod biliyor mu?

Teşekkürler.

6 Cevap

İşte bir JavaScript RSA şifreleme kütüphanesi: http://www.ohdave.com/rsa/

Ve ben seni oluşturulan şifreli dize şifresini bu sınıf gibi bir şey kullanabilirsiniz düşünüyorum - http://www.phpclasses.org/browse/package/4121.html

Ben kendimi bu konuda içine arıyorum gibi, birlikte bu işi almak yönetmek varsa bana bildirin (: P Aslında bu yazı kendimi bu cevap ararken buldum).

Düzenleme: Ben de bu buldum Bak, - http://www.sematopia.com/?p=275 - yanı sıra önceki iki ile ilgili gibi görünüyor ...

Aşağıdaki basit örneği deneyin.

Bu javascript kütüphanesi https://github.com/ziyan/javascript-rsa, bir açık kaynak kullanıyor

HTML / JAVASCRIPT:

<script language="JavaScript" type="text/javascript" src="jsbn.js"></script>
<script language="JavaScript" type="text/javascript" src="rsa.js"></script>

<script language="JavaScript">

    function encryptData(){

        //Don't forget to escape the lines:
        var pem="-----BEGIN PUBLIC KEY-----\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfmlc2EgrdhvakQApmLCDOgP0n\
NERInBheMh7J/r5aU8PUAIpGXET/8+kOGI1dSYjoux80AuHvkWp1EeHfMwC/SZ9t\
6rF4sYqV5Lj9t32ELbh2VNbE/7QEVZnXRi5GdhozBZtS1gJHM2/Q+iToyh5dfTaA\
U8bTnLEPMNC1h3qcUQIDAQAB\
-----END PUBLIC KEY-----";

        var key = RSA.getPublicKey(pem);

        element=document.getElementById('password');
        element.value=RSA.encrypt(element.value, key);
    }
</script>

<form method='POST' id='txtAuth' onsubmit='encryptData()'>
    <input type='text' name='username'/>
    <input type='password' name='password' id='password' placeholder="password"/>
    <input name='submit' type='submit' value='Submit'>
</form>

PHP:

<?php

if (isset($_POST['password'])) {

    //Load private key:
    $private = "-----BEGIN RSA PRIVATE KEY-----
    MIICXAIBAAKBgQDfmlc2EgrdhvakQApmLCDOgP0nNERInBheMh7J/r5aU8PUAIpG
    XET/8+kOGI1dSYjoux80AuHvkWp1EeHfMwC/SZ9t6rF4sYqV5Lj9t32ELbh2VNbE
    /7QEVZnXRi5GdhozBZtS1gJHM2/Q+iToyh5dfTaAU8bTnLEPMNC1h3qcUQIDAQAB
    AoGAcbh6UFqewgnpGKIlZ89bpAsANVckv1T8I7QT6qGvyBrABut7Z8t3oEE5r1yX
    UPGcOtkoRniM1h276ex9VtoGr09sUn7duoLiEsp8aip7p7SB3X6XXWJ9K733co6C
    dpXotfO0zMnv8l3O9h4pHrrBkmWDBEKbUeuE9Zz7uy6mFAECQQDygylLjzX+2rvm
    FYd5ejSaLEeK17AiuT29LNPRHWLu6a0zl923299FCyHLasFgbeuLRCW0LMCs2SKE
    Y+cIWMSRAkEA7AnzWjby8j8efjvUwIWh/L5YJyWlSgYKlR0zdgKxxUy9+i1MGRkn
    m81NLYza4JLvb8/qjUtvw92Zcppxb7E7wQJAIuQWC+X12c30nLzaOfMIIGpgfKxd
    jhFivZX2f66frkn2fmbKIorCy7c3TIH2gn4uFmJenlaV/ghbe/q3oa7L0QJAFP19
    ipRAXpKGX6tqbAR2N0emBzUt0btfzYrfPKtYq7b7XfgRQFogT5aeOmLARCBM8qCG
    tzHyKnTWZH6ff9M/AQJBAIToUPachXPhDyOpDBcBliRNsowZcw4Yln8CnLqgS9H5
    Ya8iBJilFm2UlcXfpUOk9bhBTbgFp+Bv6BZ2Alag7pY=
    -----END RSA PRIVATE KEY-----";
    if (!$privateKey = openssl_pkey_get_private($private)) die('Loading Private Key failed');

    //Decrypt
    $decrypted_text = "";
    if (!openssl_private_decrypt(base64_decode($_POST['password']), $decrypted_text, $privateKey)) die('Failed to decrypt data');

    //Decrypted :) 
    var_dump($decrypted_text);

    //Free key
    openssl_free_key($privateKey);
}
?>

Tadını çıkarın!

SSL kullanmak için sunucu kurmak ise o zaman https kullanarak ajax ile iletim şifreli sahip olabilir. Bu muhtemelen javascript ve php arasındaki verileri şifrelemek için en iyi yoldur. Eğer kendiniz yapmak istiyorsanız orada bir yerde berbat edecek büyük bir şans ve sistem alışkanlık güvenli olacak.

Sunucu için https kurmak için nasıl google.

Ben diğer kendiniz https yapmak, bu yüzden standartlara sadık olmadığını kolayca her türlü teknoloji ile şifresini çözebiliyor olması gerektiğini söylemek istiyorum daha bu standartları destekleyen yapmak için geçerli bir nedeniniz var varsayalım: çalışması lazım yani

Eğer PKCS # 7 biçiminde verilerinizi şifrelemek Örneğin, sizin php kütüphanesi giriş veri PKCS # 7 olduğunu bilir emin olun.

Also be sure that your encryption key is not scrambled between server and client. Did you try to decrypt your data with your javascript library ?

Bu yardımcı olur umarım ...

Belki size js ve php hem kullandığınız kod koyarak yardımcı olabilir.

Ayrıca, belki size js ve php kullanmak gerekir neden daha spesifik olabilir. Eğer js kullanarak nerede belki (aynı php işlevi sorgulamak için) sadece php ve AJAX kullanabilirsiniz.

Ben böbürlenmeyi biri değilim ama bu işlevi yerine getirecektir github.com bir proje var.

Özel anahtar sunucusunda oluşturulur, bir kamu anahtar ve pkcs # 7 sertifika da özel anahtarı türetilmiştir. Genel anahtar, belirtilen form ile assocated her form elemanı önce sunucuya teslim ediliyor şifrelenir hangi zaman müşteriye gönderilir.

Bu veri üretir, şifrelemek ve şifresini çözmek için PHP OpenSSL uzantısını kullanır gibi compatibile% 100 OpenSSL olduğunu.

https://github.com/jas-/jQuery.pidCrypt/

Bu proje JavaScript imzalamak ve form verilerini sunucuya gönderilene kadar e-postaları şifrelemek olmayacak çünkü PGP kadar güvenli değil, şifreli ve ya imzalanacak form veri öncesinde gönderilen için RSA açık anahtarlı şifreleme kullanarak şifrelenen sunucuya.

Yine proje kimlik ve e-posta imzalama açısından tam değil ama ortak bir anahtar kullanarak sıradan bir şekilde şifreleme için çok iyi çalışıyor.