Ben openssl_public şifrelemek kullanarak şifreli ve openssl_private_decrypt kullanılarak descrypted olan 'metin' alanına biçiminde bir mysql veritabanında hassas bilgileri saklamak.
Ancak ben yüz konu 'çöz' metin benim php komut dosyası kullanmak için çalışırken, döndürülen değeri dolayısıyla çözme imkansız hale, bunun içinde birkaç kesme ve alıntılar olmasıdır. Herhangi bir fikir bu nasıl düzeltebilirim?
Not: Ben başlangıçta alan type 'varbinary' benim bilgileri saklamak için çalıştım ama şifre çözme bunu yaparken her zaman başarısız oldu.
Biraz daha inceledikten sonra, bazen alanlar değil othertimes, boş bırakılır, çünkü belki de php ve mysql tüm bilgileri (~ 800 kayıtları) işlem bir güçlük çekiyoruz düşünüyorum. Ben tek tek saklıyorsanız, sıfır sorunları ile çalışır ancak foreach döngü çalıştırmak için çalışırken hemen hemen her zaman hatalara neden olur. Herhangi bir fikir? Kodlamak için komut aşağıdaki gibidir:
<?php
$publickey = file_get_contents("certificate.pem");
function encrypt($text)
{
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME', 'USER', 'PW');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$start = microtime(true);
$stmt = $db->prepare("SELECT ID, ITEM1_old, ITEM2_old FROM tablename");
$stmt->execute();
$rows = $stmt->fetchAll();
foreach($rows as $row) {
$id = $row['0'];
$item1 = $row['1'];
$item2 = $row['2'];
define('SALT', $id);
$item1_enc = encrypt($item1);
$item2_enc = encrypt($item2);
openssl_public_encrypt($item1_enc, $item1_ssl_enc, $publickey);
openssl_public_encrypt($item2_enc, $item2_ssl_enc, $publickey);
$stmt2 = $db->prepare("UPDATE tablename SET ITEM1_new=?, ITEM2_new=? WHERE ID=?");
$stmt2->execute(array($item1_ssl_enc, $item2_ssl_enc, $id));
}
$db->commit();
$db->NULL;
$elapsed = microtime(true) - $start;
echo "Finished.<br />Elapsed time: ".$elapsed;
}
catch (PDOException $e)
{
$db->rollback();
echo "There was a system error.".$e->getMessage();
}
?>