obscurcir ou chiffrer certaines données en texte brut en PHP
J'ai besoin de dissimuler ou de chiffrer certaines données en texte brut dans mon php 5.2 application.
Je préfère une solution qui aurait de la chaîne d'entrée et de sortie de la chaîne de conserver la même longueur.
Cette question n'est pas extrêmement forte, comme il y a de nombreux des autres couches de sécurité en place. Forte serait une bonne chose, mais ce sera juste garder les programmeurs/dba/soutenir les personnes/etc accidentellement à lire le texte de l'intérieur de la base de données.
considérations clés
- MODIFIER AJOUTER je préfère une solution qui aurait de la chaîne d'entrée et de sortie de la chaîne de conserver la même longueur.
- seule chaîne de texte sera masquée/crypté pour le stockage dans une base de données
- le php va devoir obscurcir/chiffrer les données avant de la base de données enregistrer et aura besoin de l'onu-masquer/dencrypt à la suite de la lecture de base de données
- c'est une modification d'une application existante
- seulement certaines colonnes devront être obscurci/crypté
- seulement quelques lignes devront être obscurci/crypté, basée sur un champ de Type
- il y a seulement un peu de charger ou d'enregistrer des points de gérer
- max taille de la colonne est déjà déterminée pour certains champs, mais pas pour les autres, mais je préfère une solution de travail à l'intérieur de la taille des domaines restreints
- MODIFIER, AJOUTER la clé sera sans doute un composite de certains de clé Primaire info +non modifiable champs
voici un exemple de table de base de données et des données:
int char(1) varchar(24) int date
MyPrimaryKey RowType UserText UserNo DateChange
------------ ------- ------------------------ -------- ----------------
1 N nothing special here 43 6/20/2009 12:11am
2 N same thing, wow! 78 6/23/2009 1:03pm
3 S fBJKg}.jkjWfF78dlg@45kjg 43 6/25/2009 6:45am
4 N same old, same old text 21 6/25/2009 8:11am
L'application serait de charger et afficher les lignes 1, 2, et 4 normalement. Cependant, il serait conditionnelle (basé sur le type de ligne) gérer le texte à la ligne 3 à l'aide de cette obscurcir/crypter et de l'onu-coder/décoder la logique.
Quelqu'un peut-il fournir obscurcir/crypter et de l'onu-coder/décoder les fonctions de code, des liens, et ou un pointeur qui pourraient aider ici?
merci!
MODIFIER
J'aime le simple encodage base64 idée, mais est-il une méthode qui permet de conserver les données au sein d'une taille fixe. Toutes les méthodes présentées jusqu'ici ont la valeur de sortie supérieure à la valeur d'entrée. Cela va être un problème pour certaines colonnes, où l'utilisateur peut entrer dans 50 caractères et il est stocké dans un varchar(50) de la colonne.
source d'informationauteur KM.
Vous devez vous connecter pour publier un commentaire.
pour la simple dissimulation de l'utilisation strtr() - traduction de certains caractères:
string strtr ( string $str , string $from , $string )
pour coder en php:
à décoder en php:
vous pouvez facilement reproduire cette logique dans la base de données si nécessaire (sans la boucle): À l'aide d'un Tableau de Nombres, par Erland Sommarskog
Comment sur le codage base64? Nous utilisons pour l'utiliser pour faire des messages SMS dans notre Passerelle SMS DB illisible par les développeurs.
Il ya quelques options.
Si vous voulez très fort, vous pourriez regarder dans mcrypt.
Mais si c'est seulement ainsi, travailler les développeurs cant lire le texte sans un certain travail à faire. Ensuite, vous pouvez simplement L'encoder en BASE64 ou uuencode il
Si vous avez mcrypt installé (toutes mes PHP environnements), vous pouvez utiliser mcrypt_encrypt et mcrypt_decrypt comme ceci:
qui utilise un mondial
$key
et AES (très fort).Inconvénients sont les performances (en comparaison des plus simples comme Base64) et que vous en quelque sorte avoir à réparer une clé.
Acclamations,
si vous utilisez mysql autour de la version 5, alors vous n'avez même pas besoin de beaucoup de php, vous pouvez le faire à l'intérieur de votre requête avec mysql fonctions de chaîne
encrypt(text, password)
etdecrypt(text, password)
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html
DECODE(crypt_str,pass_str)
Décrypte la chaîne cryptée crypt_str à l'aide de pass_str que le mot de passe. crypt_str devrait être une chaîne de caractères retournée à partir de ENCODE().
ENCODE(str,pass_str)
Chiffrer str en utilisant pass_str que le mot de passe. Pour décrypter le résultat, utiliser DECODE().
Le résultat est une chaîne binaire de la même longueur que str.
La force du chiffrement est basé sur comment bien le générateur aléatoire est. Cela devrait être suffisant pour de courtes chaînes de caractères.
mise à jour: une autre possibilité serait
rot13
^^Essayez ces fonctions PHP convert_uuencode et convert_uudecode:
Essayez d'utiliser le mcrypt de la bibliothèque. Il n'est pas inclus avec le standard de PHP, mais il est facilement téléchargeable et très couramment utilisés. Voici un tutoriel rapide sur ce que vous pouvez faire avec lui.
Il est préférable de s'assurer que la clé à utiliser pour le chiffrement est stocké dans un endroit sûr, mais si vous n'êtes pas vraiment préoccupé par la sécurité, vous seriez probablement OK juste coder en dur la clé dans votre code quelque part.