Sicherer Umgang mit Passwörtern im Quellcode
Im Kontext des Zugriffs auf eine RESTful-API mithilfe der Basisauthentifizierung ist das Speichern des Benutzernamens und des Passworts im Klartext erforderlich ein Sicherheitsrisiko. Um die Sicherheit zu erhöhen, beachten Sie die folgenden Empfehlungen:
1. Konvertieren Sie Passwörter in Zeichen-Arrays
Ersetzen Sie das Klartext-Passwort durch ein Zeichen-Array. Dies verhindert die Verwendung von String-Objekten, die Daten behalten, nachdem sie auf Null gesetzt wurden.
2. Anmeldeinformationen verschlüsseln und vorübergehend entschlüsseln
Verschlüsseln Sie die Anmeldeinformationen mit einem Algorithmus wie Triple Data Encryption Standard (3DES), bevor Sie sie speichern. Entschlüsseln Sie sie nur während des Authentifizierungsprozesses.
3. Anmeldeinformationen extern speichern
Vermeiden Sie die harte Codierung von Anmeldeinformationen. Speichern Sie sie stattdessen an einem zentralen Ort, beispielsweise in einer Konfigurationsdatei oder Datenbank. Verschlüsseln Sie sie, bevor Sie die Datei speichern, und wenden Sie optional eine weitere Verschlüsselungsebene auf die Datei selbst an.
4. Übertragung schützen
Verwenden Sie Transport Layer Security (TLS) oder Secure Sockets Layer (SSL), um den Übertragungsprozess zu sichern.
5. Code verschleiern
Wenden Sie Verschleierungstechniken auf Ihren kompilierten Code an, um sensible Daten zu verbergen.
Beispiel für Passwortverschlüsselung und -entschlüsselung:
Das Folgende Das Codebeispiel demonstriert den oben beschriebenen ersten und zweiten Schritt:
import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; public class PasswordEncryptionExample { private static final char[] PASSWORD = "Unauthorized_Personel_Is_Unauthorized".toCharArray(); private static final byte[] SALT = { (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12, (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12 }; public static void main(String[] args) throws Exception { String password = "LetMePass_Word"; char[] passwordArray = password.toCharArray(); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); SecretKey key = keyFactory.generateSecret(new PBEKeySpec(PASSWORD)); Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES"); pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(SALT, 20)); byte[] encryptedPassword = pbeCipher.doFinal(passwordArray); // Cleanup password data sources Arrays.fill(passwordArray, (char) 0); Arrays.fill(encryptedPassword, (byte) 0); // Decrypt the encrypted password pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20)); byte[] decryptedPassword = pbeCipher.doFinal(encryptedPassword); String decryptedPasswordString = new String(decryptedPassword); System.out.println("Decrypted password: " + decryptedPasswordString); } }
Das obige ist der detaillierte Inhalt vonWie gehe ich sicher mit Passwörtern im Quellcode um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!