protected function encrypt($text) { $cryptKey = 'rTGsEReERsADqqW'; $qEncoded = BASE64_ENCODE(MCRYPT_ENCRYPT(MCRYPT_RIJNDAEL_256, MD5($cryptKey), $text, MCRYPT_MODE_CBC, MD5(MD5($cryptKey)))); return $qEncoded; }
public function encrypt_session_json($USER_SENDER, $pPLAIN_JSON) { // PROCESO DE CODIFICACION LA PK ES DEL QUE ENVÍA // ************************************************* // q= // BASE64_ENCODE ({ // "u" : 4, // "k" : CRYPT_RSA_AES_KEY = RSA_PK_PRIV ( BASE64_ENCODE ( AES_KEY ) ), // "d" : CRIPT_AES_KEY_DATA = BASE64_ENCODE ( AES_KEY ( AES_SALT, BASE64_ENCODE ( DATA ) ) ) // }) // //CRIPT_AES_KEY_DATA = BASE64_ENCODE ( AES_KEY ( AES_SALT, BASE64_ENCODE ( DATA ) ) ) //CRYPT_RSA_AES_KEY = RSA_PK_PRIV ( BASE64_ENCODE ( AES_KEY ) ) // Por ejemplo: // DATA={"u":4,"k":"111","d": {<otro json>} } // Datos originales $DATA = $pPLAIN_JSON; $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "DATA: " . $this->sysUtils->show_json_pretty_print($DATA)); // Los codifico en BASE64 $DATA_64 = BASE64_ENCODE($DATA); $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "DATA_64: " . $DATA_64); // Generamos la clave aleatoria SALT para AES con la que se va a cifrar todo el mensaje // Esta clave ya sale en BASE64 // Genero el SALT $AES_SALT = $this->secure_rand(10); $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "AES_SALT: " . $AES_SALT); // Genero la clave AES // Cifrado simétrico $AES_ENC = $this->sysCryptAES; // Utilizado para cifrar la clave pública y privada y que no esté en texto plano $AES_ENC->setKey($AES_SALT); // Cifro el Mensaje con AES y su SALT aleatoria $CRIPT_AES_KEY_DATA = BASE64_ENCODE($AES_ENC->encrypt($DATA_64)); $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "CRIPT_AES_KEY_DATA: " . $CRIPT_AES_KEY_DATA); // El usuario quien envia en este ejemplo es: imarkket.dev@gmail.com // y se lo envía a interactua.dev@gmail.com, por lo que: // CIFRADO: // SEND: imarkket --> cifra --> pub ( interactua ) // DESCIFRADO: // RECIVER: interactua --> descifra --> pri ( interactua ) // Ahora debo cifrar la clave AES con la PK PUBLICA del emisor $SENDER_EMAIL = $this->sysBD->user_ncod_usuario_find($USER_SENDER); $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "SENDER_EMAIL: " . $SENDER_EMAIL); // Buscamos si tiene las 2 claves if (!$this->sysBD->find_PGP_key_user($SENDER_EMAIL)) { $this->sysKrn->krn_do_json($pSTATUS = FALSE, $pPARAM_1 = ERR_API_RUN_NOT_RSA_PK_SENDER, $pPARAM_2 = "RSA not found!!!"); } // Ciframos $SENDER_PUB_KEY = $this->get_PGP_RSA_key($SENDER_EMAIL, 'PUBLIC'); if (!$SENDER_PUB_KEY) { $this->sysKrn->krn_do_json($pSTATUS = FALSE, $pPARAM_1 = ERR_API_RUN_NOT_PGP_PUBLIC, $pPARAM_2 = "PGP not PUBLIC KEY!!!"); } $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "SENDER_PUB_KEY: \r\n" . $SENDER_PUB_KEY); $RSA_ENC = $this->sysCryptRSA; $RSA_ENC->loadKey($SENDER_PUB_KEY); $RSA_ENC->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); // Ciframos la SALT $CRYPT_RSA_AES_KEY = BASE64_ENCODE($RSA_ENC->encrypt($AES_SALT)); $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "CRYPT_RSA_AES_KEY: " . $CRYPT_RSA_AES_KEY); // Construimos el mensaje $JSON = '{ "u": ' . $USER_SENDER . ', "k": "' . $CRYPT_RSA_AES_KEY . '", "d": "' . $CRIPT_AES_KEY_DATA . '" }'; $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "JSON: " . $this->sysUtils->show_json_pretty_print($JSON)); $JSON_CIFRADO = BASE64_ENCODE($JSON); $this->sysKrn->krn_audit_log(AUDIT_APPLICATION, __DIR__, __FILE__, __LINE__, __CLASS__, __METHOD__, __FUNCTION__, "JSON_CIFRADO_TO_BASE64: " . $JSON_CIFRADO); return $JSON_CIFRADO; }