PHP 5.3 представил новый метод шифрования, который действительно прост в использовании: openssl_encrypt
и openssl_decrypt
. Это не очень хорошо задокументировано, поэтому вот простой пример:
$textToEncrypt = "My super secret information.";
$encryptionMethod = "AES-256-CBC"; // AES is used by the U.S. gov't to encrypt top secret documents.
$secretHash = "25c6c7ff35b9979b151f2136cd13b0ff";
//To encrypt
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash);
//To Decrypt
$decryptedMessage = openssl_decrypt($encryptedMessage, $encryptionMethod, $secretHash);
//Result
echo "Encrypted: $encryptedMessage
Decrypted: $decryptedMessage";
Я выбрал 256-AES, потому что он надежный и быстрый. Он был принят правительством США для шифрования сверхсекретных документов. Это быстро, учитывая машину и программное обеспечение. Вот список доступных методов шифрования:
AES-128-CBC, AES-128-CFB, AES-128-CFB1, AES-128-CFB8, AES-128-ECB, AES-128-OFB, AES-192-CBC, AES-192-CFB, AES-192-CFB1, AES-192-CFB8, AES-192-ECB, AES-192-OFB, AES-256-CBC, AES-256-CFB, AES- 256-CFB1, AES-256-CFB8, AES-256-ECB, AES-256-OFB, BF-CBC, BF-CFB, BF-ECB, BF-OFB, CAMELLIA-128-CBC, CAMELLIA-128-CFB, CAMELLIA-128-CFB1, CAMELLIA-128-CFB8, CAMELLIA-128-ECB, CAMELLIA-128-OFB, CAMELLIA-192-CBC, CAMELLIA-192-CFB, CAMELLIA-192-CFB1, CAMELLIA-192-CFB8, CAMELLIA- 192-ECB, CAMELLIA-192-OFB, CAMELLIA-256-CBC, CAMELLIA-256-CFB, CAMELLIA-256-CFB1, CAMELLIA-256-CFB8, CAMELLIA-256-ECB, CAMELLIA-256-OFB, CAST5-CBC, CAST5-CFB, CAST5-ECB, CAST5-OFB, DES-CBC, DES-CFB, DES-CFB1, DES-CFB8, DES-ECB, DES-EDE, DES-EDE-CBC, DES-EDE-CFB, DES- EDE-OFB, DES-EDE3, DES-EDE3-CBC, DES-EDE3-CFB, DES-EDE3-CFB1, DES-EDE3-CFB8, DES-EDE3-OFB, DES-OFB, DESX-CBC, RC2-40- CBC, RC2-64-CBC, RC2-CBC, RC2-CFB, RC2-ECB, RC2-OFB, RC4, RC4-40, SEED-CBC, SEED-CFB, SEED-E CB, SEED-OFB, aes-128-cbc, aes-128-cfb, aes-128-cfb1, aes-128-cfb8, aes-128-ecb, aes-128-ofb, aes-192-cbc, aes- 192-cfb, aes-192-cfb1, aes-192-cfb8, aes-192-ecb, aes-192-ofb, aes-256-cbc, aes-256-cfb, aes-256-cfb1, aes-256- cfb8, aes-256-ecb, aes-256-ofb, bf-cbc, bf-cfb, bf-ecb, bf-ofb, камелия-128-cbc, камелия-128-cfb, камелия-128-cfb1, камелия- 128-cfb8, камелия-128-ecb, камелия-128-ofb, камелия-192-cbc, камелия-192-cfb, камелия-192-cfb1, камелия-192-cfb8, камелия-192-экб, камелия-192- ofb, камелия-256-cbc, камелия-256-cfb, камелия-256-cfb1, камелия-256-cfb8, камелия-256-ecb, камелия-256-ofb, cast5-cbc, cast5-cfb, cast5-ecb, cast5-ofb, des-cbc, des-cfb, des-cfb1, des-cfb8, des-ecb, des-ede, des-ede-cbc, des-ede-cfb, des-ede-ofb, des-ede3, des-ede3-cbc, des-ede3-cfb, des-ede3-cfb1, des-ede3-cfb8, des-ede3-ofb, des-ofb, desx-cbc, rc2-40-cbc, rc2-64-cbc, rc2-cbc, rc2-cfb, rc2-ecb, rc2-ofb, rc4, rc4-40, seed-cbc, seed-cfb, seed-ecb, seed-ofb
ВАЖНО ОБНОВЛЕНИЕ !!!
Спасибо Хобо и Джорвину за то, что они указали, что в PHP 5.3.3> есть новый параметр, который делает эту функцию немного более безопасной.
Джорвин ссылался на эту ссылку в в своем комментарии , и вот выдержка, которая применима:
В 5.3.3 они добавили новый параметр,
string $iv
(вектор инициализации) Действительными параметрами являются:string openssl_encrypt ( string $data , string $method , string $password, bool $raw_output = false, string $iv )
Если
$iv
отсутствует, выдается предупреждение: «Использование пустого вектора инициализации (iv) потенциально небезопасно и не рекомендуется».Если
$iv
слишком короткое, другое предупреждение: «Переданный IV имеет длину всего 3 байта, шифр ожидает IV ровно 8 байтов с заполнением \ 0», тот же IV следует использовать в
openssl_decrypt()
Я рекомендую вместо этого использовать sort_by:
objects.sort_by {|obj| obj.attribute}
Особенно, если атрибут может быть вычислен.
Или более краткий подход:
objects.sort_by(&:attribute)
Сортировка массива # работает хорошо , как указано выше:
myarray.sort! { |a, b| a.attribute <=> b.attribute }
НО, вам необходимо убедиться, что для этого атрибута реализован оператор <=>
. Если это собственный тип данных Ruby, это не проблема. В противном случае напишите собственную реализацию, которая возвращает -1, если a b.
Да, использовать Array # sort!
это просто.
myarray.sort! { |a, b| a.attribute <=> b.attribute }