Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.40 KB | None | 0 0
  1. <?php
  2.  
  3. const ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'];
  4. const DEBUG = false;
  5.  
  6. function vernam_crypt($string, $key = "", $decrypt = false){
  7.         $string_len = mb_strlen($string, 'utf-8');
  8.         $result = "";
  9.         if(empty($key)){
  10.             for($j = 0; $j < 8; $j++){
  11.                 $key .= ALPHABET[rand(0, count(ALPHABET)-1)];
  12.             }
  13.             echo 'new key: '.$key.'<br/>';
  14.         }
  15.        
  16.         $key_len = strlen($key);
  17.         for($i = 0; $i < $string_len; $i+=$key_len){
  18.             for($j = 0; $j < $key_len; $j++){
  19.                 if(empty($string[$i+$j])) break;
  20.                 if(DEBUG) echo '/'.($i+$j).'=['.$string[$i+$j].']/';
  21.                 //$result .= $string[$i+$j] == " " ? " " : chr(ord($string[$i+$j])^ord($key[$j])); //Нестабилен, если прописная заглавная буква ключа совпадает с прописной строки и наоборот.
  22.                 if(!$decrypt){
  23.                     $result .= $string[$i+$j] == " " ? " " : chr(ord($string[$i+$j]) + (ord($key[$j]) % 26));
  24.                 } else {
  25.                     $result .= $string[$i+$j] == " " ? " " : chr(ord($string[$i+$j]) + ( (26-ord($key[$j]))  % 26));
  26.                 }
  27.             }
  28.         }
  29.    
  30.         echo ($decrypt ? 'decrypted: ' : 'encrypted: ').$result;
  31.         return [$key, $result];
  32. }
  33.  
  34. $res = vernam_crypt('It was a wonderful world with nothing!');
  35. echo '<br/>-----------------<br/>';
  36. vernam_crypt($res[1], $res[0], true); //I am grut
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement