API con seguridad a través de una clave privada y pública -- php campo con mysql campo con security campo con cryptography camp codereview Relacionados El problema

API with security through a private and public key


1
vote

problema

Español

Quiero hacer que los usuarios inicien sesión en una aplicación. El código en mi servidor sirve un "token". Esto se basa en una sal que se guarda para cada usuario, la fecha de inicio de sesión, expDate y el userId . Ese valor es llevado por la clave principal y ese resultado se envía al usuario. Si la aplicación necesita algunos datos, el token y la ID de usuario se envían al servidor para descifrarlo. ¿Es este un enfoque sólido? El servidor utiliza SSL.

  public $secret = "898appxp132m}]23E";   function generateApiKey($userId){      //generate the salt, experation date, and login date     $salt = base64_encode(openssl_random_pseudo_bytes(128, $secure));     while(!$secure){         $salt = base64_encode(openssl_random_pseudo_bytes(128, $secure));     }      $loginDate = date("Y-m-d");     $expDate = date("Y-m-d");      //insert at the database     $this->load->model("Api_Model");     $this->Api_Model->insertApiInformation($userId,$salt,$loginDate,$expDate);      //generate the actual public key     $userSalt = $salt . hash("sha512", $userId . $loginDate . $expDate . $salt);      return hash("sha512", $userSalt . $this->secret . $userId); }  function verifyApiKey($publicHash, $userId){      //insert at the database     $this->load->model("Api_Model");     $info = $this->Api_Model->getApiInformation($userId);      //generate the actual public key     $userSalt = $info[0]->user_token . hash("sha512", $userId . $info[0]->date_login . $info[0]->date_expires . $info[0]->user_token);      if(hash("sha512", $userSalt . $this->secret . $userId) == $publicHash){         return $this->generateApiKey($userId);     } else {         return false;     } }   

He cambiado un poco mi código ya que el token es sujetable. Pensé que tal vez sea mejor cambiar el código en cada solicitud cuando el código anterior fue válido. Y he usado SHA512 por un token más largo.

Original en ingles

I want to make users login into an app. The code on my server serves a "token". This is based on a salt that is saved for each user, the login date, expDate and the userId. That value is hashed by the main key and that result is sent back to the user. If the app needs some data the token and user ID is sent to the server to decrypt it. Is this a solid approach? The server uses SSL.

public $secret = "898appxp132m}]23E";   function generateApiKey($userId){      //generate the salt, experation date, and login date     $salt = base64_encode(openssl_random_pseudo_bytes(128, $secure));     while(!$secure){         $salt = base64_encode(openssl_random_pseudo_bytes(128, $secure));     }      $loginDate = date("Y-m-d");     $expDate = date("Y-m-d");      //insert at the database     $this->load->model("Api_Model");     $this->Api_Model->insertApiInformation($userId,$salt,$loginDate,$expDate);      //generate the actual public key     $userSalt = $salt . hash("sha512", $userId . $loginDate . $expDate . $salt);      return hash("sha512", $userSalt . $this->secret . $userId); }  function verifyApiKey($publicHash, $userId){      //insert at the database     $this->load->model("Api_Model");     $info = $this->Api_Model->getApiInformation($userId);      //generate the actual public key     $userSalt = $info[0]->user_token . hash("sha512", $userId . $info[0]->date_login . $info[0]->date_expires . $info[0]->user_token);      if(hash("sha512", $userSalt . $this->secret . $userId) == $publicHash){         return $this->generateApiKey($userId);     } else {         return false;     } } 

I have changed my code a bit since the token is guessable. I thought that maybe it's better to change the code on each request when the previous code was valid. And I have used SHA512 for a longer token.

           
 
 

Lista de respuestas


Relacionados problema

3  Implementación de WMSAUTH  ( Wmsauth implementation ) 
Tengo que implementar WMSAUTH en C #: http://wmsauth.org/examples // The following function was copied from http://wmsauth.org/examples public static str...

6  Formando combinaciones de palabras del archivo  ( Forming word combinations from file ) 
Estoy buscando ideas para optimizar el siguiente código para la velocidad. También estoy buscando una buena mejora en el tiempo de ejecución. Este código le...

6  Java AES cbc cifrado / descifrado  ( Java aes cbc encryption decryption ) 
He examinado varios ejemplos de cifrado de modo de Java AES CBC, pero no pude encontrar una solución adecuada para usar. Terminé escribiendo mi propia clase d...

4  Herramienta de cifrado de archivos en terminal  ( Files encryption tool in terminal ) 
He creado una envoltura para el Simplecrypt biblioteca que permite cifrar / descifrar fácilmente una cadena. La aplicación se utiliza esto: //To encryp...

7  HMAC con SHA256 / 512 en óxido  ( Hmac with sha256 512 in rust ) 
He intentado lo mejor que puedo, para implementar HMAC como se especifica en la RFC 2104 < / a>. Este es también mi primer proyecto de óxido, por lo que las ...

51  Cifrado seguro simplificado de una cadena  ( Simplified secure encryption of a string ) 
Tengo dos ejemplos de código que escribí para las mejores prácticas cifrando una cadena que busco comentarios tanto en términos de mejores prácticas y segurid...

2  Implementación T-SQL TOTP (RFC6238 SHA2_256)  ( T sql totp rfc6238 sha2 256 implementation ) 
Usando mi Función anterior Como base que he subido lo siguiente: create function dbo.Totp ( @key varbinary(8000) , @timeStep int = 90 ) returns tab...

10  Clase de cifrado AES-128  ( Aes 128 encryption class ) 
Esta es la primera vez que escribí una clase en Java para hacer cifrado utilizando AES. Dado que la seguridad está involucrada, me encantaría si alguien pudie...

4  C # interfaz de criptografía  ( C cryptography interface ) 
C # carece de una interfaz común de encriptación y descifrado de estantes para la inyección de dependencia. Casi todas las bases de código que he abierto tien...

5  PYCRYPTO AES-256 CTR WRPPER SEGURO PARA USO PÚBLICO?  ( Pycrypto aes 256 ctr wrapper secure for public use ) 
He intentado escribir un envoltorio AES CTR más fácil de usar con Pycrypto, pero no estoy seguro de si está lo suficientemente seguro. Quiero decir, de forma ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos