ذات مرة ، قبل عدة سنوات ، أتيحت لي الفرصة للقيام بمهمة اختبار للتوظيف في شركة واحدة ، حيث كانت المهمة هي تطوير خوارزمية تشفير متماثل غير قياسي على مستوى عالٍ ، على عكس إيديولوجيًا إلى حد ما مثل كلاسيكيات النوع - عملية x أو الرسالة الأصلية والمفتاح السري ... تم تنفيذ المهمة بشكل سيئ ، لكن فكرة إنشاء خوارزمية مثيرة للاهتمام وغير تافهة ظلت عالقة في رأسي لفترة طويلة.
وفي الوقت الحالي ، ظهر ما أسميته GenCoder منه .
توقع التعليقات حول الأجهزة الخاصة وجوانب العلاقة معهم ، إذا كان النشاط مرتبطًا بالتشفير ، بالنظر إلى المستقبل ، سأقول إن العمل يتم تنفيذه حصريًا للأغراض التجريبية والبحثية (غير التجارية).
في الواقع ، يمكن الاطلاع على الكود المصدري للفصل هنا ، ويمكنك اختباره هنا .
إذن ، كانت مهمة (هذه التجربة البحثية ، كما سنسميها) كما يلي:
طور خوارزمية التشفير العكسي الخاصة بك ، بينما:
- في كل مرة يتم تشفير نفس الرسالة بطريقة فريدة ولن تتكرر.
- أدخل ما يسمى بـ " التوزيع العشوائي " للمفتاح السري - لإيجاد طريقة لتشفير الرسائل ليس دائمًا بنفس المفتاح السري ، ولكن بسلسلة سرية معينة ، وهي وظيفة المفتاح السري والرسالة الأصلية.
- كإضافة غير مهمة ، اجعل طول المفتاح السري متغيرًا مع الحفاظ على قوة التشفير العالية للخوارزمية (في الإصدار الحالي - من 64 إلى 100 حرف).
- كما ذكرنا أعلاه ، لا تلتصق بالحلول الحالية ، ولكن افعل شيئًا خاصًا بك ، بدون رياضيات معقدة ، باستخدام خوارزمية بسيطة ومفهومة.
اذهب.
تم اختيار التشفير المتماثل للتطوير.
عادة ، تنقسم تطبيقات التشفير المتماثل عمومًا إلى فئتين عريضتين ، الأصفار الكتلية وأصفار التدفق. تقوم شفرات الحظر بتشفير الرسالة الأصلية في كتل صغيرة ، وتقوم دفق الأصفار بتشفير الرسالة بأكملها بمقارنتها بسلسلة معينة ، أي أن موقع رمز الرسالة في الرسالة الأصلية مهم أيضًا. قليل من الكلام المحرج ومن الواضح أنه لا يسحب التعريف ، ولكنه مفهوم قدر الإمكان.
الخوارزمية الموصوفة هنا تشبه إلى حد كبير تشفير التدفق ، على الرغم من أنها ليست في شكلها النقي.
, , , . , , , , , .
, , , (pathKeySignature ), . — sha-512 , , uniqid, .
? , . , , 14-, 22-, 37-, 49- .. — ( pathKeySignature).
, ( , - , ). , " " xor-.
"" , (pass1 pass2, 4 ), , , , - .
. , , (, ) .
.
private function attachKey($message, $salt)
{
return md5(hash('sha512', $message . uniqid() . $salt) . hash('sha512', $salt));
}
private function pathKeySignature($user_code_1, $user_code_2, $attach_key)
{
return hash('sha512', $user_code_1 . $attach_key . $user_code_2);
}
, md5 - , , ( sha512) attachKey. uniqid , , . ? , . — , . ? , , "!", " ", "", " ", " ?". , , . , 1 2 "0372985dee", 2 5 "0372985dee" . ? .
uniqid, .
. , cipher $path_key_signature, byteShifting .
private function cipher($path_key_signature, $message, $generateKey)
{
...
for ($i = 0; $i < count($message); $i++) {
if ($sign_key >= self::hash_length) $sign_key = 0;
$key_code_pos = hexdec($path_key_signature[$sign_key]);
$cur_key_pos = $cur_key_pos + $key_code_pos;
if ($cur_key_pos >= $key_length) {
$cur_key_pos = $cur_key_pos - $key_length;
}
$shifted_key_symbol = $generateKey[$cur_key_pos];
// byte shifting
$shifted_key_symbol = $this->byteShifting($i, $shifted_key_symbol);
$shifter = $this->mb_ord($message{$i}) ^ $this->mb_ord($shifted_key_symbol);
$cipher_message .= $this->mb_chr($shifter);
$sign_key++;
}
return $cipher_message;
}
, attachKey pathKeySignature . , , $attach_key
public function codeMessage($message, $generateKey, $user1_pass, $receiver_hashcode)
{
$sender_hashcode = $this->sender_hashcode($user1_pass);
$attach_key = $this->attachKey($message, $this->salt);
$path_key_signature = $this->pathKeySignature($sender_hashcode, $receiver_hashcode, $attach_key);
$result_cipher = $this->cipher($path_key_signature, $message, $generateKey) . $attach_key;
$result_cipher = base64_encode($result_cipher);
return gzencode($result_cipher, 9);
}
, . attachKey, ? , "" — attachKey , , . , , , "" . , , . . .
decodeMessage , , .
, .
:
- / ( )
- ,
:
- ( , ) , .
.
من حيث سرعة الخوارزمية ، فهي سريعة نسبيًا (بالطبع كل شيء نسبي ومفهوم بالمقارنة ، نحن نتحدث عن سرعة التشفير في إطار yap عالي المستوى بشكل عام وفي إطار php بشكل خاص). تم تشفير 2 ميغا بايت من النصوص العشوائية وفك تشفيرها في 4 ثوانٍ باستخدام php 7.2. النظام: Intel Core i7-8700 CPU @ 3.20GHz × 12 ، متصفح به مجموعة من علامات التبويب وجهاز افتراضي لا يزال قيد التشغيل. ملخص - سرعة التشفير حوالي 1 ميجابايت / ثانية على جهاز متوسط مع php7.0 وأعلى.