2010-11-14 16 views
9

Ho bisogno di usare openSSL in un progetto, non ho esperienza con questo, somo può aiutare qualcuno ?, Userò php per questo.OpenSSl + PHP come implementarlo

Grazie.

+0

perché ci sono voti per riaprire questo? c'è qualche meta discussione sulla creazione di un canonico? –

risposta

1

HTTPS viene solitamente implementato sul server Web, non in linguaggi di scripting. Ad esempio, se si sta distribuendo questo progetto su un server Apache, è possibile controllare the Apache documents relating to SSL.

2

Se si desidera semplicemente inviare i dati del modulo tramite HTTPS, Apache dovrebbe essere in grado di gestirlo per conto dell'utente. Tuttavia, se si vogliono usare OpenSSL e PHP per generare coppie di chiavi e la crittografia dei dati, questo articolo in due parti che ho scritto potrebbe essere utile a voi:

http://3stepsbeyond.co.uk/company-blog/coding/openssl-and-php-part-one

http://3stepsbeyond.co.uk/company-blog/coding/openssl-and-php-part-two

+0

Purtroppo i collegamenti sono morti ora. – Code4R7

6

Qui sono alcuni esempi su come utilizzare OpenSSL e php:

function encryptData($source, $privateKey) 
{ 
    $maxLength = 117; 

    $output = ""; 
    while ($source) 
    { 
     $slice = substr($source, 0, $maxLength); 
     $source = substr($source, $maxLength); 

     openssl_private_encrypt($slice, $encrypted, $privateKey); 
     $output .= $encrypted; 
    } 

    return $output; 
} 

function decryptData($source, $publicKey) 
{ 
    $maxLength = 128; 

    $output = ""; 
    while ($source) 
    { 
     $slice = substr($source, 0, $maxLength); 
     $source = substr($source, $maxLength); 

     openssl_public_decrypt($slice, $decrypted, $publicKey); 

     $output .= $decrypted; 
    } 

    return $output; 
} 

// usage 
$myPrivateKey = ""; // your generated private key 
$myPublicKey = ""; // your generated public key 

$rawText = "lorem ipsum"; 

$crypted = encryptData($rawText, $myPrivateKey); 
$decrypted = decryptData($crypted, $myPublicKey); 

per generare la coppia di chiavi pubblica/privata, basta eseguire i seguenti comandi:

openssl genrsa -out private_key.pem 1024 
openssl rsa -pubout -in private_key.pem -out public_key.pem 

troverai due chiavi nella directory corrente. Se hai bisogno di aggiungerli alla variabile, fai attenzione agli spazi bianchi.

9

Vuoi generare un paio di chiavi con php?

$NEW_KEY = openssl_pkey_new(array(
    'private_key_bits' => 1024, 
    'private_key_type' => OPENSSL_KEYTYPE_RSA, 
     )); 

openssl_pkey_export_to_file($NEW_KEY, 'private.key'); 

$NEW_KEY_DETAILS = openssl_pkey_get_details($NEW_KEY); 
file_put_contents('public.key', $NEW_KEY_DETAILS['key']); 

openssl_free_key($NEW_KEY); 

Avete già le chiavi?

$public = "-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfmlc2EgrdhvakQApmLCDOgP0n 
NERInBheMh7J/r5aU8PUAIpGXET/8+kOGI1dSYjoux80AuHvkWp1EeHfMwC/SZ9t 
6rF4sYqV5Lj9t32ELbh2VNbE/7QEVZnXRi5GdhozBZtS1gJHM2/Q+iToyh5dfTaA 
U8bTnLEPMNC1h3qcUQIDAQAB 
-----END PUBLIC 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'); 
if (!$publicKey = openssl_pkey_get_public($public)) die('Loading Public Key failed'); 

$encrypted = ''; 
$decrypted = ''; 

$plaintext = 'This is just some text to encrypt'; 

echo '<p>$plaintext = ' . $plaintext . '<p>'; 

if (!openssl_public_encrypt($plaintext, $encrypted, $publicKey)) die('Failed to encrypt data'); 

echo '<p>$encrypted = ' . $encrypted . '<p>'; 

if (!openssl_private_decrypt($encrypted, $decrypted, $privateKey)) die('Failed to decrypt data'); 

echo '<p>$decrypted = ' . $decrypted . '<p>'; 

Ecco, buon divertimento!