学习啦>学习电脑>网络知识>网络技术>

如何正确地使用加密与认证技术(2)

时间: 恒辉636 分享

  0x02 加密

  我们之前定义了加密,并且详细说明了它是提供机密性,但不提供完整性和真实性的。你可以篡改加密信息,并将产生的垃圾给予接收者。而且你甚至可以利用这种垃圾产生机制,来绕过安全控制。

  考虑在加密cookie的情况下,有如下代码:

  function setUnsafeCookie($name, $cookieData, $key)

  {

  $iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);

  return setcookie(

  $name,

  base64_encode(

  $iv.

  mcrypt_encrypt(

  MCRYPT_RIJNDAEL_128,

  $key,

  json_encode($cookieData),

  MCRYPT_MODE_CBC,

  $iv

  )

  )

  );

  }

  function getUnsafeCookie($name, $key)

  {

  if (!isset($_COOKIE[$name])) {

  return null;

  }

  $decoded = base64_decode($_COOKIE[$name]);

  $iv = mb_substr($decoded, 0, 16, '8bit');

  $ciphertext = mb_substr($decoded, 16, null, '8bit');

  $decrypted = rtrim(

  mcrypt_decrypt(

  MCRYPT_RIJNDAEL_128,

  $key,

  $ciphertext,

  MCRYPT_MODE_CBC,

  $iv

  ),

  "

如何正确地使用加密与认证技术(2)

时间: 恒辉636 分享

  0x02 加密

  我们之前定义了加密,并且详细说明了它是提供机密性,但不提供完整性和真实性的。你可以篡改加密信息,并将产生的垃圾给予接收者。而且你甚至可以利用这种垃圾产生机制,来绕过安全控制。

  考虑在加密cookie的情况下,有如下代码:

  function setUnsafeCookie($name, $cookieData, $key)

  {

  $iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);

  return setcookie(

  $name,

  base64_encode(

  $iv.

  mcrypt_encrypt(

  MCRYPT_RIJNDAEL_128,

  $key,

  json_encode($cookieData),

  MCRYPT_MODE_CBC,

  $iv

  )

  )

  );

  }

  function getUnsafeCookie($name, $key)

  {

  if (!isset($_COOKIE[$name])) {

  return null;

  }

  $decoded = base64_decode($_COOKIE[$name]);

  $iv = mb_substr($decoded, 0, 16, '8bit');

  $ciphertext = mb_substr($decoded, 16, null, '8bit');

  $decrypted = rtrim(

  mcrypt_decrypt(

  MCRYPT_RIJNDAEL_128,

  $key,

  $ciphertext,

  MCRYPT_MODE_CBC,

  $iv

  ),

  "

"

  );

  return json_decode($decrypted, true);

  }

  上面的代码提供了在密码段链接模块的AES加密,如果你传入32字节的字符串作为$key,你甚至可以声称,为你的cookie提供了256位的AES加密,然后人们可能被误导相信它是安全的。

如何正确地使用加密与认证技术(2)

0x02 加密 我们之前定义了加密,并且详细说明了它是提供机密性,但不提供完整性和真实性的。你可以篡改加密信息,并将产生的垃圾给予接收者。而且你
推荐度:
点击下载文档文档为doc格式
168319