2012-09-24 91 views
2

我試圖在PHP中實現加密和解密函數,但它並不僅僅是正確的。這裏是算法:使用PHP加密和解密

  • 加密密鑰是一個主代碼:1234567890
  • 加密字母表是a-z, A-Z, 0-9, =
  • 加密屬於加密字母表的簽名後的每個符號。跳過其他人。
  • 符號通過加密字母表中的移位(向右)進行加密。移位量由加密密鑰的當前數字給出。加密密鑰的當前數字在每次使用後向右移動,並從結束循環到開始。

這裏是我當前的代碼:

function tnsencrypt($master_code,$text) { //the text to be encrypted $plain_text= $text; 

//letters of alphabet array $alphabet=array('0','1','2','3','4','5','6','7','8','9','=','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','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'); 

//$alphabet_len = count($alphabet); //$signature_len = 17; // signature=TnpMsgE //$master_code_len = 10; $mcursor = 0; 

//positions of the letters in alphabet : The array_flip() function returns an array with all the original keys as values, and all original values as keys. $flip=array_flip($alphabet); //plaintext array $plain_text=str_split($plain_text); $master_code=str_split($master_code); 

$n=count($plain_text); $encrypted_text=''; for ($i=0; $i } 

} 

//echo $encrypted_text; return $encrypted_text; } 

function tnsdecrypt($master_code,$text) { //the text to be decrypted $encrypted_text= $text; 

//letters of alphabet array $alphabet=array('0','1','2','3','4','5','6','7','8','9','=','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','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'); //positions of the letters in alphabet : The array_flip() function returns an array with all the original keys as values, and all original values as keys. $flip=array_flip($alphabet); 

//plaintext array $encrypted_text=str_split($encrypted_text); $master_code=str_split($master_code); 

$n=count($encrypted_text); $decrypted_text=''; for ($i=0; $i 

} else { 
    $decrypted_text.= $encrypted_text[$i]; 
} 
//move mcursor 
$mcursor = ($mcursor+1)%10; 
} 

//echo $encrypted_text; return $decrypted_text; 

} 

if(isset($_POST["text"])) { $text = $_POST["text"]; $shifttext = $_POST["shifttext"]; echo " 
Encrypted Text: ".tnsencrypt($shifttext,$text); echo " 
Decrypted Text: ".tnsdecrypt($shifttext,tnsencrypt($shifttext,$text)); 

} 

?> 

這裏是我的結果:

原始文本:val1=1234567 val2=abcdef val3=ABCDEF

加密文本:vjt8F666666F 3hr7Dddddnn 2gq7CCCCMMM

加密文本:vjt8F666666F hr7Dddddnn gq7CCCCMMM

解密文本:val1=1234567 al2=abcdef al3=ABCDEF

正如你可以看到,幾個字符缺失的加密和影響解密也是如此。缺少的是第2行上的v和第3行上的v

任何想法爲什麼?

+0

這是爲了好玩還是爲了真實?它的加密輸出看起來應該是隨機的。 – drew010

+3

如果是爲了學習/好玩,然後繼續。如果它用於生產用途,那麼您絕對不應該使用您自己的加密算法。許多現有的經過戰鬥測試的算法的使用。 – xbonez

回答

1

你爲什麼這樣做?還有,你可以使用,而不是幾個單和雙向加密解決方案,如果這是實際使用,而不僅僅是一個學術活動:

單向crypt()
雙向mcrypt

加密是一個已解決的問題。