2012-10-06 42 views
0

我需要在具有用AES加密存儲的char字符串的cookie上存儲最大字符數。用於在cookie上存儲數據的AES加密

cookie有大約4kb的內存。

所以我需要指出我可以存儲在cookie中加密AES所有這些字符的字符數。

要存儲的字符是一個字母數字字符串。

編輯:我可以允許所有都在明文和在chipertext

的UTF-8個字母數字字符THIS是我的代碼

<?php 


$Pass = "132ksjcngpt04938idjsk39urtokg"; 
$Clear = "123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123456789o"; 


$crypted = fnEncrypt($Clear, $Pass); 
echo "Encrypred: ".$crypted."<br></br>"; 

$newClear = fnDecrypt($crypted, $Pass); 
echo "Decrypred: ".$newClear."<br></br>"; 



function fnEncrypt($sValue, $sSecretKey) 
{ 
    return trim(
     base64_encode(
      mcrypt_encrypt(
       MCRYPT_RIJNDAEL_128, 
       $sSecretKey, $sValue, 
       MCRYPT_MODE_ECB, 
       mcrypt_create_iv(
        mcrypt_get_iv_size(
         MCRYPT_RIJNDAEL_128, 
         MCRYPT_MODE_ECB 
        ), 
        MCRYPT_RAND) 
       ) 
      ) 
     ); 
} 

function fnDecrypt($sValue, $sSecretKey) 
{ 
    return trim(
     mcrypt_decrypt(
      MCRYPT_RIJNDAEL_128, 
      $sSecretKey, 
      base64_decode($sValue), 
      MCRYPT_MODE_ECB, 
      mcrypt_create_iv(
       mcrypt_get_iv_size(
        MCRYPT_RIJNDAEL_128, 
        MCRYPT_MODE_ECB 
       ), 
       MCRYPT_RAND 
      ) 
     ) 
    ); 
} 
?> 

我測試了PIECE,這是結果:

Encrypred: xINH9LnDsiwJjxrxAE7WYKTGBqw2tkKDx/04vryevRfkgKIqO0sRVurGW1Qu267CBuU9CwgS9YIXFs6zhM6y/limz3P8rST6phe5xP9zsw1tX42ngl7SgmK6apoVTjkXtxzY2XQtsuhBv6gPqBG1uoNqhU9QbhQXnbrqQUL7jG0UxGxqbAgb49atHjkTap4H55yzd4dJROlJ9G98rKe1znEU17XDUWjgDkebgG2puew804Sxh+seRMyV4MqmA4bt+uSKGASPQYONyHmY/3pz+yY0HFb/6GERHMOopJGGr17z9ZaQ7R6EeuGko1tiKYxfOX7Ep1hzJqGZ97TWtL+gyF/WaTpFedgLoKTLYe/CcGH3vmCyCngeGAdhVeqJ2bw2KUbJnvGXwiFI4ZKqS6U9Jf9Gzw/IlVMYIlCbGeml1EtinVN82aTwmrPplqmx+nVQP25S7xEG9VaGtCm9d0y2Ntlc/JvzSSG9cKU+bXl6O871X1vQgkhVvulw7zX5T7MH3N7kVRIawieTzq4aLXT/8cSDR/S5w7IsCY8a8QBO1mCkxgasNrZCg8f9OL68nr0X5ICiKjtLEVbqxltULtuuwgblPQsIEvWCFxbOs4TOsv5Yps9z/K0k+qYXucT/c7MNbV+Np4Je0oJiumqaFU45F7cc2Nl0LbLoQb+oD6gRtbqDaoVPUG4UF5266kFC+4xtFMRsamwIG+PWrR45E2qeB+ecs3eHSUTpSfRvfKyntc5xFNe1w1Fo4A5Hm4BtqbnsPNOEsYfrHkTMleDKpgOG7frkihgEj0GDjch5mP96c/smNBxW/+hhERzDqKSRhq9e8/WWkO0ehHrhpKNbYimMXzl+xKdYcyahmfe01rS/oMhf1mk6RXnYC6Cky2HvwnBh975gsgp4HhgHYVXqidm8NilGyZ7xl8IhSOGSqkulPSX/Rs8PyJVTGCJQmxnppdRLYp1TfNmk8Jqz6Zapsfp1UD9uUu8RBvVWhrQpvXdMtjbZXPyb80khvXClPm15ejvO9V9b0IJIVb7pcO81+U+zB9ze5FUSGsInk86uGi10//HEg0f0ucOyLAmPGvEATtZgpMYGrDa2QoPH/Ti+vJ69F+SAoio7SxFW6sZbVC7brsIG5T0LCBL1ghcWzrOEzrL+WKbPc/ytJPqmF7nE/3OzDW1fjaeCXtKCYrpqmhVOORe3HNjZdC2y6EG/qA+oEbW6g2qFT1BuFBeduupBQvuMbRTEbGpsCBvj1q0eORNqngfnnLN3h0lE6Un0b3ysp7XOcRTXtcNRaOAOR5uAbam57DzThLGH6x5EzJXgyqYDhu365IoYBI9Bg43IeZj/enP7JjQcVv/oYREcw6ikkYavXvP1lpDtHoR64aSjW2IpjF85fsSnWHMmoZn3tNa0v6DIX9ZpOkV52AugpMth78JwYfe+YLIKeB4YB2FV6onZvDYpRsme8ZfCIUjhkqpLpT0l/0bPD8iVUxgiUJsZ6aXUS2KdU3zZpPCas+mWqbH6dVA/blLvEQb1Voa0Kb13TLY22Vz8m/NJIb1wpT5teXo7zvVfW9CCSFW+6XDvNflPswfc3uRVEhrCJ5POrhotdP/xxINH9LnDsiwJjxrxAE7WYKTGBqw2tkKDx/04vryevRfkgKIqO0sRVurGW1Qu267CBuU9CwgS9YIXFs6zhM6y/limz3P8rST6phe5xP9zsw1tX42ngl7SgmK6apoVTjkXtxzY2XQtsuhBv6gPqBG1uoNqhU9QbhQXnbrqQUL7jG0UxGxqbAgb49atHjkTap4H55yzd4dJROlJ9G98rKe1znEU17XDUWjgDkebgG2puew804Sxh+seRMyV4MqmA4bt+uSKGASPQYONyHmY/3pz+yY0HFb/6GERHMOopJGGr17z9ZaQ7R6EeuGko1tiKYxfOX7Ep1hzJqGZ97TWtL+gyF/WaTpFedgLoKTLYe/CcGH3vmCyCngeGAdhVeqJ2bw2KUbJnvGXwiFI4ZKqS6U9JTDlQCMOqEIQk3IEy0A+ivyDaoVPUG4UF5266kFC+4xtFMRsamwIG+PWrR45E2qeB+ecs3eHSUTpSfRvfKyntc5xFNe1w1Fo4A5Hm4BtqbnsPNOEsYfrHkTMleDKpgOG7frkihgEj0GDjch5mP96c/smNBxW/+hhERzDqKSRhq9e8/WWkO0ehHrhpKNbYimMXzl+xKdYcyahmfe01rS/oMhf1mk6RXnYC6Cky2HvwnBh975gsgp4HhgHYVXqidm8NilGyZ7xl8IhSOGSqkulPSX/Rs8PyJVTGCJQmxnppdRLYp1TfNmk8Jqz6Zapsfp1UD9uUu8RBvVWhrQpvXdMtjbZXPyb80khvXClPm15ejvO9V9b0IJIVb7pcO81+U+zB9ze5FUSGsInk86uGi10//HEg0f0ucOyLAmPGvEATtZgpMYGrDa2QoPH/Ti+vJ69F+SAoio7SxFW6sZbVC7brsIG5T0LCBL1ghcWzrOEzrL+WKbPc/ytJPqmF7nE/3OzDW1fjaeCXtKCYrpqmhVOORe3HNjZdC2y6EG/qA+oEbW6g2qFT1BuFBeduupBQvuMbRTEbGpsCBvj1q0eORNqngfnnLN3h0lE6Un0b3ysp7XOcRTXtcNRaOAOR5uAbam57DzThLGH6x5EzJXgyqYDhu365IoYBI9Bg43IeZj/enP7JjQcVv/oYREcw6ikkYavXvP1lpDtHoR64aSjW2IpjF85fsSnWHMmoZn3tNa0v6DIX9ZpOkV52AugpMth78JwYfe+YLIKeB4YB2FV6onZvDYpRsme8ZfCIUjhkqpLpT0l/0bPD8iVUxgiUJsZ6aXUS2KdU3zZpPCas+mWqbH6dVA/blLvEQb1Voa0Kb13TLY22Vz8m/NJIb1wpT5teXo7zvVfW9CCSFW+6XDvNflPswfc3uRVEhrCJ5POrhotdP/xxINH9LnDsiwJjxrxAE7WYKTGBqw2tkKDx/04vryevRfkgKIqO0sRVurGW1Qu267CBuU9CwgS9YIXFs6zhM6y/limz3P8rST6phe5xP9zsw1tX42ngl7SgmK6apoVTjkXtxzY2XQtsuhBv6gPqBG1uoNqhU9QbhQXnbrqQUL7jG0UxGxqbAgb49atHjkTap4H55yzd4dJROlJ9G98rKe1znEU17XDUWjgDkebgG2puew804Sxh+seRMyV4MqmA4bt+uSKGASPQYONyHmY/3pz+yY0HFb/6GERHMOopJGGr17z9ZaQ7R6EeuGko1tiKYxfOX7Ep1hzJqGZ97TWtL+gyF/WaTpFedgLoKTLYe/CcGH3vmCyCngeGAdhVeqJ2bw2DCNhxeoaLYIP/o/Cbx5ufoNqhU9QbhQXnbrqQUL7jG0UxGxqbAgb49atHjkTap4H55yzd4dJROlJ9G98rKe1znEU17XDUWjgDkebgG2puew804Sxh+seRMyV4MqmA4bt+uSKGASPQYONyHmY/3pz+yY0HFb/6GERHMOopJGGr17z9ZaQ7R6EeuGko1tiKYxfOX7Ep1hzJqGZ97TWtL+gyF/WaTpFedgLoKTLYe/CcGH3vmCyCngeGAdhVeqJ2bw2KUbJnvGXwiFI4ZKqS6U9Jf9Gzw/IlVMYIlCbGeml1EtinVN82aTwmrPplqmx+nVQP25S7xEG9VaGtCm9d0y2Ntlc/JvzSSG9cKU+bXl6O871X1vQgkhVvulw7zX5T7MH3N7kVRIawieTzq4aLXT/8cSDR/S5w7IsCY8a8QBO1mCkxgasNrZCg8f9OL68nr0X5ICiKjtLEVbqxltULtuuwgblPQsIEvWCFxbOs4TOsv5Yps9z/K0k+qYXucT/c7MNbV+Np4Je0oJiumqaFU45F7cc2Nl0LbLoQb+oD6gRtbqDaoVPUG4UF5266kFC+4xtFMRsamwIG+PWrR45E2qeB+ecs3eHSUTpSfRvfKyntc5xFNe1w1Fo4A5Hm4BtqbnsPNOEsYfrHkTMleDKpgOG7fcgwEO8b4hbdZM893s5T4W65w7kB3E9LFMARJATuxEONiJHm3YcAFDdl04v/hLNoA== 

Decrypred: 123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123456789o 

chiperText被compoused 3040 UTF-8字符

加密是最多4056個utf-8字符

+1

1)AES沒有散列。 2)輸出大小取決於鏈接模式。你在使用哪一個? CBC? 3)您可能需要添加IV和MAC,否則可能不安全。 4)字符和字節不是一回事(假設一個理智的類型系統)。 – CodesInChaos

+0

@CodesInChaos感謝您的信息我是新手在這個論點上,我想了解它,我編輯了我的答案,以更好地展示你(希望我的英語很好)我需要做什麼;) – sbaaaang

+1

你是字符的定義目前尚不清楚。明文允許使用哪些字符,哪些字符使用密文? – CodesInChaos

回答

1

如果使用已認證的流模式,例如AES-GCM,在字節原料密文大小將大於明文大小32個字節。其中16個爲隨機IV,16個爲MAC。

現在您遇到了任意字節無法使用UTF-8的問題,因此您需要一些編碼來解決這個問題。 Base64是一種流行的變體,但它將尺寸增加到原始尺寸的4/3。
這意味着如果您的大小限制是4KiB,您將能夠支持高達3040字節的明文。

還有其他更高效的編碼,但這會變得更加複雜,您需要弄清楚哪些字符是有效的(如\0)。除非絕對必要,否則我不建議。


您的代碼有很多錯誤的:

  1. 您使用ECB,幾乎是最糟糕的模式
  2. 你需要加密和解密使用相同的IV。所以將它與密文一起存儲。你沒有注意到,因爲歐洲央行不使用IV。
  3. 您沒有身份驗證。
  4. 你的第四代不好。使用MCRYPT_DEV_URANDOM而不是MCRYPT_RAND
+0

需要做一些測試 – sbaaaang

+0

這是一種安全的加密方法嗎? base64 + AES對不對? – sbaaaang

+0

我打算使用CBC模式沒關係? – sbaaaang

1

如果我錯了,請更正我,但假設您使用UTF-8作爲純文本的字母數字字符,因爲AES使用16字節長度的塊(可以將其視爲16個字母數字字符在這種情況下),您的純文本至少填充了15個字節(最壞的情況)。

(n + 16) - (n % 16) 

只是我的2美分:

因此,鑑於n你的純文本的長度,所產生的密文的長度可以與推斷。 Dario。 Dario。

+1

1)您假定像CBC 2這樣的模式) AES的輸出不是有效的UTF-8,所以你需要使用像Base64這樣的編碼來增加尺寸。 3)你的公式錯過IV和MAC – CodesInChaos

+0

我會變得瘋狂的傢伙,請如果有人可以在我的頭部做點命令 – sbaaaang

+0

@CodesInChaos我知道你有答案請給我TI :)) – sbaaaang