Festlegen des Base64-Verschlüsselungsschlüssels als Umgebungsvariable (Systemvariable) unter Windows 10

558
user3216506

Ich habe eine Anwendung, die eine Verbindung zu BigQuery mithilfe mehrerer CREDs aus der JSON-Datei herstellt. Diese App wird sich schließlich auf Pivotal Cloud Foundry befinden und muss als vom Benutzer bereitgestellte Umgebungsvariable festgelegt werden. Ich habe die base64-Verschlüsselung verwendet, um den Inhalt der .json-Datei in einen base64-Schlüssel zu kodieren.

Die Idee ist, dass ich den Schlüssel dann als Wert der Umgebungsvariablen verwenden kann, sodass ich alle BigQuery-API-Verbindungsinformationen aus der .json-Datei in eine Umgebungsvariable ziehen kann - mithilfe des base64-Schlüssels, anstatt viele Schlüssel- / Wertpaar-Variablen zu erstellen diese.

Hinweis: Der base64-Schlüssel umfasst 3.165 Zeichen - einschließlich neuer Zeilenzeichen.

Ein kurzer Ausschnitt des base64-Schlüssels ist:

nROdXlnWnVmb1k0UnVqTFJlcjgrckZJRlpZdVxuYUFsMklsWk9MUjd3cmRzL0RDZytYdGJGYUp4MzlRaWZHaEp6b2hyblNvbUpyY3ExL2d4aVFYYlplUUtCZ0hja1xua0hqL1M0Wkk0d0dWTzJreEN4QzduYnB1STVQRTRWczRHMjE0RkpldnhPR1hDQ3phOFB5bGJPbm5KUFdZZUJoT1xuV3IwMzduazd5eXpja0p6cE\ p0R0hlNkZLNFJNcHFIRHBmU0pMOE80T2YwWi9UYUZ3ZTM4bE9XbWc1Q2NLUC9XUVxuUjhYdlgzS25UZXRQUWxVeXJwK1BNVHNNdG4yVnBad1hMZDNJTExKYkFvR0JBS1FaODdVbEE1S0kwV3JqVnRic1xuaXJ6UkdDaGhVWE90SXVDT09zWlQyOXNpeFVoQmZka1JzTFpCcnB6VkVWektXeGhBY05lRERRbTJkVzBta09\ 1elxuTkNVUlBpbGZYT0pLRkdNQ2lOdkIyZW5OMDVBK2ExdVdOWFFkclQzRG10OG5MS3FFYnp6VTNheXIweWVsc0tKeVxuNE9BVExMK3M5M29oRFV6WEhRZlVtbnNMXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iLAogICJjbGllbnRfZW1haWwiOiAidG1wLWFkLWxvY2tvdXRAaW8xLWRhdGFsYWtlLXZpZXdz\ 

Ich weiß, dass dies unter macOS als Systemvariable festgelegt werden kann (ich habe gesehen, dass die Anwendung Verbindungen herstellt und ordnungsgemäß funktioniert), aber ich kann dies unter Windows 10 nicht.

Ich kenne die Beschränkung der maximalen Länge für Systemvariablen unter Windows, bin aber nicht auf eine Lösung gestoßen, mit der "GOOGLE_JSON_B64" als Umgebungsvariablenname und der 3.165-Schlüssel als Umgebungsvariablenwert festgelegt werden konnte.

Hat jemand eine Problemumgehung? Soll ich sie aus einer Datei einlesen? Wenn ja, wie würde dies unter Windows 10 erfolgen? Muss ich dann den Pfad irgendwie einstellen?

Jeder Einblick wäre sehr dankbar.

0
[base64] (https://en.wikipedia.org/wiki/Base64) ** _ ist keine Verschlüsselung _ ** ... der gerade freigegebene Schlüssel sollte nicht erneut verwendet werden. Attie vor 5 Jahren 0

1 Antwort auf die Frage

0
harrymc

Die Dokumentation von Microsoft besagt, dass eine Umgebungsvariable unter Windows nur 32.767 Zeichen umfasst ( Link ). Es wird nicht gesagt, wie eine sehr lange Variable erstellt wird.

Das Problem hierbei ist, dass die von Windows bereitgestellten Tools alle ihre Grenzen haben:

Der Befehl set und der Befehl setx kürzen die Werte auf 1023 Zeichen.

Man kann Umgebungsvariablen direkt in der Registry unter setzen HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, aber die Verwendung von Regedit schlägt fehl, da eingegebene Zeichenfolgen über die Tastatur auf 2047 Zeichen begrenzt sind.

Soweit ich sehen kann, besteht die einzige verbleibende Option darin, ein kleines Programm zu schreiben, das die Registrierung direkt aktualisiert. Die zu verwendende Windows-API-Funktion ist SetEnvironmentVariable, deren Dokumentation Folgendes enthält :

Die maximale Größe einer benutzerdefinierten Umgebungsvariablen beträgt 32.767 Zeichen.

Man hoffe, dass dies zumindest richtig ist. Sie können hier bis zur maximalen Zeilenlänge laufen, die vom Compiler akzeptiert wird. In einem Programm können Sie jedoch eine so lange Zeichenfolge in Schritten erstellen.

Warum brauchen Sie diese neuen Zeilenzeichen? harrymc vor 5 Jahren 0
Die neuen Zeilenzeichen sind Teil des Schlüssels. Die base64-Kodierung stellt die Json-Datei dar, die mehrere Zeilen / Komponenten enthält. Das heißt, die .json-Datei ist nicht nur ein Schlüssel / Wert-Paar, sondern besteht aus mehreren Zeilen von Creds, einschließlich Service-Account, Service-Account-Kennwort, privater Schlüssel-ID, privatem Schlüssel, Client-E-Mail, Client-ID und mehr. Jedes neue Zeilenzeichen im Schlüssel repräsentiert also ein Schlüssel / Wert-Paar in der Json-Datei. Alle Teile der Json-Datei / -Schlüssel mit neuen Zeilenzeichen werden benötigt, um die Verbindung zu BigQuery herzustellen. user3216506 vor 5 Jahren 0
Als ich den Schlüssel zusammenbrach, indem ich alle Leerzeichen entfernte und den Set-Befehl erneut ausführte, bemerkte ich, dass er mehr Schlüssel speichern konnte, aber nicht alle. Es scheint insgesamt ein Limit von 1.023 Zeichen erreicht zu haben. user3216506 vor 5 Jahren 0
Dieser Bereich ist ein großes Chaos - ich habe meine Antwort umgeschrieben. harrymc vor 5 Jahren 0