موقع - كيف تشفير وفك تشفير سلسلة PHP؟




موقع لفك جميع انواع التشفير (4)

ما أعنيه هو:

Original String + Salt or Key --> Encrypted String
Encrypted String + Salt or Key --> Decrypted (Original String)

ربما شيء من هذا القبيل:

"hello world!" + "ABCD1234" --> Encrypt --> "2a2ffa8f13220befbe30819047e23b2c" (may be, for e.g)
"2a2ffa8f13220befbe30819047e23b2c" --> Decrypt with "ABCD1234" --> "hello world!"
  • في PHP ، كيف يمكنك القيام بذلك؟

محاولة استخدام Crypt_Blowfish ، لكنها لم تنجح بالنسبة لي.

https://code.i-harness.com


ملاحظة تاريخية: تمت كتابة هذا في وقت PHP4. هذا ما نطلق عليه "الرمز القديم" الآن.

لقد تركت هذه الإجابة للأغراض التاريخية - ولكن بعض الأساليب تم إيقافها الآن ، وطريقة تشفير DES ليست ممارسة موصى بها ، إلخ.

لم أقم بتحديث هذا الرمز لسببين: 1) لم أعد أعمل مع أساليب التشفير يدويًا في PHP ، و 2) لا يزال هذا الرمز يخدم الغرض المقصود منه: إظهار الحد الأدنى ، المفهوم البسيط لكيفية عمل التشفير في PHP.

إذا وجدت نوعًا مشابهًا من التبسيط ، مثل "PHP encryption for dummies" ، يمكن أن يبدأ الأشخاص في 10-20 سطر من الكود أو أقل ، أخبرني في التعليقات.

أبعد من ذلك ، يرجى التمتع بهذه الحلقة الكلاسيكية من الإجابة على التشفير المبسط في PHP4 المبكرة.

من الناحية المثالية لديك - أو يمكنك الحصول على - الوصول إلى مكتبة PHP mcrypt ، باعتبارها بالتأكيد مجموعة متنوعة من المهام بالتأكيد مفيدة جدا ومفيدة للغاية. فيما يلي عملية تشغيل أنواع مختلفة من التشفير وبعض كود المثال: تقنيات التشفير في PHP

//Listing 3: Encrypting Data Using the mcrypt_ecb Function 

<?php 
echo("<h3> Symmetric Encryption </h3>"); 
$key_value = "KEYVALUE"; 
$plain_text = "PLAINTEXT"; 
$encrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $plain_text, MCRYPT_ENCRYPT); 
echo ("<p><b> Text after encryption : </b>"); 
echo ( $encrypted_text ); 
$decrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $encrypted_text, MCRYPT_DECRYPT); 
echo ("<p><b> Text after decryption : </b>"); 
echo ( $decrypted_text ); 
?> 

بعض التحذيرات:

1) لا تستخدم أبدًا التشفير القابل للانعكاس أو "المتماثل" عند إجراء تجزئة ذات اتجاه واحد.

2) إذا كانت البيانات حساسة حقاً ، مثل بطاقة الائتمان أو أرقام الضمان الاجتماعي ، فتوقف ؛ تحتاج إلى أكثر من أي جزء بسيط من التعليمات البرمجية ، ولكن تحتاج إلى مكتبة التشفير المصممة لهذا الغرض ، وكمية كبيرة من الوقت للبحث في الأساليب اللازمة. علاوة على ذلك ، فإن تشفير البرنامج ربما يكون <10٪ من أمان البيانات الحساسة. إنها مثل إعادة تركيب محطة طاقة نووية - تقبل أن المهمة خطيرة وصعبة وتتخطى معرفتك إذا كان هذا هو الحال. يمكن أن تكون العقوبات المالية هائلة ، لذا من الأفضل استخدام الخدمة ومسؤولية السفينة تجاههم.

3) أي نوع من التشفير القابل للتنفيذ بسهولة ، كما هو موضح هنا ، يمكن أن يحمي بشكل معقول المعلومات الهامة بشكل معتدل التي تريد الاحتفاظ بها من أعين المتطفلين أو الحد من التعرض في حالة تسرب غير مقصود / مقصود. ولكن بالنظر إلى كيفية تخزين المفتاح في نص عادي على خادم الويب ، إذا تمكنوا من الحصول على البيانات ، يمكنهم الحصول على مفتاح فك التشفير.

كن على هذا النحو ، استمتع :)


لإطار Laravel

إذا كنت تستخدم إطار Laravel ، فمن السهل أكثر تشفير وفك تشفير الوظائف الداخلية.

$string = 'Some text to be encrypted';
$encrypted = \Illuminate\Support\Facades\Crypt::encrypt($string);
$decrypted_string = \Illuminate\Support\Facades\Crypt::decrypt($encrypted);

var_dump($string);
var_dump($encrypted);
var_dump($decrypted_string);

ملاحظة: تأكد من تعيين سلسلة عشوائية 16 أو 24 أو 32 في خيار المفتاح لملف config / app.php. خلاف ذلك ، لن تكون القيم المشفرة آمنة.


لقد تأخرت إلى الحفلة ، ولكنني بحثت عن الطريقة الصحيحة لإجراء ذلك. لقد عثرت على هذه الصفحة وكانت واحدة من أهم نتائج البحث في Google ، لذلك أود أن أشارك وجهة نظري حول المشكلة ، والتي أعتبرها حتى الآن في وقت كتابة هذا المقال (بداية عام 2017). من PHP 7.1.0 سيتم إيقاف mcrypt_decrypt و mcrypt_encrypt ، لذلك يجب استخدام كود openssl_encrypt المستقبلي الذي يتم استخدامه openssl_encrypt و openssl_decrypt

يمكنك فعل شيء مثل:

$string_to_encrypt="Test";
$password="password";
$encrypted_string=openssl_encrypt($string_to_encrypt,"AES-128-ECB",$password);
$decrypted_string=openssl_decrypt($encrypted_string,"AES-128-ECB",$password);

هام : يستخدم وضع ECB ، وهو غير آمن. إذا كنت تريد حلا بسيطا من دون أخذ دورة مكثفة في هندسة التشفير ، فلا تكتبها بنفسك ، فقط استخدم المكتبة .

يمكنك استخدام أي طرق أخرى للفرم أيضًا وفقًا لحاجتك الأمنية. لمعرفة طرق openssl_get_cipher_methods المتاحة ، يرجى الاطلاع على وظيفة openssl_get_cipher_methods .


ما الذي عليك عدم فعله

تحذير:
يستخدم هذا الجواب ECB . إن البنك المركزي الأوروبي ليس طريقة تشفير ، بل هو مجرد لبنة. استخدام ECB كما هو موضح في هذه الإجابة لا يقوم بالفعل بتشفير السلسلة بشكل آمن. لا تستخدم البنك المركزي الأوروبي في التعليمات البرمجية. انظر share عن حل جيد.

حصلت على نفسي. في الواقع ، وجدت بعض الإجابات على google وقمت بتعديل شيء ما. والنتيجة غير آمنة تماما.

<?php
define("ENCRYPTION_KEY", "[email protected]#$%^&*");
$string = "This is the original data string!";

echo $encrypted = encrypt($string, ENCRYPTION_KEY);
echo "<br />";
echo $decrypted = decrypt($encrypted, ENCRYPTION_KEY);

/**
 * Returns an encrypted & utf8-encoded
 */
function encrypt($pure_string, $encryption_key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
    return $encrypted_string;
}

/**
 * Returns decrypted original string
 */
function decrypt($encrypted_string, $encryption_key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
    return $decrypted_string;
}
?>




encryption-symmetric