Cela dépend de ce que vous allez faire avec l'information. Si vous utilisez le nom et le mot de passe pour accéder à un service externe (mais que l'utilisateur devra entrer à nouveau les informations lors de la prochaine exécution du programme), il est préférable de les stocker dans certaines variables. Il peut être judicieux de les stocker cryptées (au moins, stocker le mot de passe crypté) de sorte qu'il n'est pas visible dans les vidages de base ou l'équivalent. Lorsque le mot de passe est requis, vous le déchiffrez, l'utilisez, puis écrivez là où la version déchiffrée a été stockée (zappée). (Remarque: le hachage n'est pas approprié dans ce contexte, vous devez être capable de voir le mot de passe, et vous ne pouvez pas annuler un hachage.) Vous pouvez décider de stocker les informations en dehors du programme (dans un fichier disque), mais ne semble pas nécessaire. Notez que le binaire contiendra toujours la clé de cryptage (et l'algorithme de cryptage), et les données cryptées sont plus aléatoires que le contenu moyen de votre programme, donc vraiment dissimuler le mot de passe crypté est très difficile (presque impossible). Cependant, vous pouvez le rendre assez difficile pour arrêter tous les attaquants, sauf les plus déterminés.
Si vous stockez le nom d'utilisateur et le mot de passe en tant qu'enregistrement permanent afin de pouvoir valider que le même utilisateur accède aux informations dans le futur, vous devez utiliser un stockage externe au programme; vous utiliserez une base de données simple, qui pourrait être aussi simple qu'un fichier texte si vous vous assurez de résoudre les problèmes de concurrence. Dans ce cas, vous devrez hacher le mot de passe avec un peu de sel, et vous stockez le nom d'utilisateur, le mot de passe salt et hashed de telle sorte que, compte tenu du nom d'utilisateur, vous pouvez facilement trouver les deux autres valeurs.
commentaires Nuit Walker:
J'utilise ce mot de passe pour accéder à une base de données web, donc je besoin stocké dans ma demande une fois qu'il est entré pour la première fois. Êtes-vous sûr qu'un fichier texte brut est une idée intelligente?
Cela dépend de la façon dont vous concevez «stocké dans mon application». Vous ne pouvez pas modifier l'exécutable, ou du moins ne devriez pas essayer de le faire. Donc, vous devez regarder comme un enregistrement permanent stocké dans une sorte de fichier distinct de l'exécutable de l'application. D'un autre côté, vous faites face à un problème différent de ce que j'ai décrit - vous n'authentifiez pas l'utilisateur avec l'information; vous devez déchiffrer les informations à la demande pour les envoyer à d'autres applications. Tout d'abord, cela signifie que les sels et les hachages ne sont pas pertinents; vous devez inverser l'opération de masquage, et vous ne pouvez pas inverser un hachage.
Ensuite, vous devez décider comment identifier l'utilisateur de votre application lors de sa réapparition. L'utilisateur sera-t-il obligé d'entrer un mot de passe pour accéder à ses propres données, ou vous ferez-vous simplement confiance aux privilèges du système d'exploitation ou à un autre système? Si l'utilisateur doit entrer un mot de passe dans votre application pour démarrer, vous pouvez utiliser ce mot de passe (ou un hachage, différent du mot de passe utilisé pour reconnaître le mot de passe de l'application) pour crypter le nom d'utilisateur/combinaison de mot de passe pour l'application externe. Vous pouvez ensuite stocker le nom d'utilisateur et, à titre d'argument, une version codée en Base 64 du mot de passe chiffré dans un fichier texte; C'est aussi sûr que le mot de passe de l'application, qui est stocké dans le format de hachage salé d'origine. Lorsque l'utilisateur revient, il doit fournir son nom d'utilisateur et son mot de passe, et vous pouvez valider cette combinaison par rapport aux valeurs stockées, puis utiliser le mot de passe pour déchiffrer le mot de passe de l'application externe.
Si l'utilisateur n'entre pas de mot de passe, vous êtes limité dans ce que vous pouvez faire. Vous devez être en mesure de déterminer une clé à partir des informations qui peuvent être utilisées pour stocker le mot de passe crypté de l'utilisateur dans un fichier dans un emplacement restreint tel qu'un sous-répertoire situé sous son répertoire personnel sans accès au groupe ou au public:
mkdir ~/.appname
chmod 700 ~/.appname
cp /dev/null ~/.appname/app.key
...store the encrypted information...
chmod 500 ~/.appname
chmod 400 ~/.appname/app.key
Ceci est moins satisfaisant car même si vous combinez une clé fixe avec le nom de l'utilisateur, par exemple, les chances sont que quelqu'un peut travailler ce que la clé est (et la technologie de cryptage) et le désossage. (Le secret des données cryptées dépend des clés, lorsque la clé est déterminable par le programme, il est également déterminable par un attaquant déterminé .Il vaut mieux, de loin, compter sur l'utilisateur pour fournir la clé (ou un mot de passe ou phrase de passe) lors de l'exécution, puis l'application ne stocke rien qu'un attaquant peut utiliser hors ligne
J'utilise ce mot de passe pour accéder à une base de données web, donc j'en ai besoin stocké dans mon application après son entrée pour la première fois. Êtes-vous sûr que le fichier texte brut est cette idée intelligente? –
comme je le vois le record permanent est la meilleure idée jusqu'à maintenant. l'application n'a pas d'autres mots de passe, et il ne compte pas que les autres utilisateurs vont utiliser cette application. seule chose est d'essayer de sauver le mot de passe + nom d'utilisateur d'autres ppl. –
Oui, le stockage des informations dans un fichier permanent sera nécessaire. Utilisez un fichier distinct pour chaque utilisateur de l'application; stocker le mot de passe crypté dans l'encodage Base-64 (de sorte que vous avez un fichier texte brut). Dérivez la clé utilisée pour le cryptage à partir d'un hachage cryptographique de ce que vous considérez comme les caractéristiques les plus fiables de l'utilisateur (peut-être une concaténation de son nom d'utilisateur et numéro d'utilisateur, et peut-être du texte fixe) un emplacement que vous pouvez concevoir. La sécurité est loin d'être parfaite - ce que vous pouvez concevoir, vos attaquants peuvent découvrir. –