Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- 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'];
- const DEBUG = false;
- function vernam_crypt($string, $key = "", $decrypt = false){
- $string_len = mb_strlen($string, 'utf-8');
- $result = "";
- if(empty($key)){
- for($j = 0; $j < 8; $j++){
- $key .= ALPHABET[rand(0, count(ALPHABET)-1)];
- }
- echo 'new key: '.$key.'<br/>';
- }
- $key_len = strlen($key);
- for($i = 0; $i < $string_len; $i+=$key_len){
- for($j = 0; $j < $key_len; $j++){
- if(empty($string[$i+$j])) break;
- if(DEBUG) echo '/'.($i+$j).'=['.$string[$i+$j].']/';
- //$result .= $string[$i+$j] == " " ? " " : chr(ord($string[$i+$j])^ord($key[$j])); //Нестабилен, если прописная заглавная буква ключа совпадает с прописной строки и наоборот.
- if(!$decrypt){
- $result .= $string[$i+$j] == " " ? " " : chr(ord($string[$i+$j]) + (ord($key[$j]) % 26));
- } else {
- $result .= $string[$i+$j] == " " ? " " : chr(ord($string[$i+$j]) + ( (26-ord($key[$j])) % 26));
- }
- }
- }
- echo ($decrypt ? 'decrypted: ' : 'encrypted: ').$result;
- return [$key, $result];
- }
- $res = vernam_crypt('It was a wonderful world with nothing!');
- echo '<br/>-----------------<br/>';
- vernam_crypt($res[1], $res[0], true); //I am grut
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement