Jak zaszyfrować kilkoma kluczami publicznymi plik. Potrzebuje wiedzieć czy potrzebuję jakieś biblioteki jak pobrać klucze z folderu i nimi zaszyfrować dany plik.
Nim napiszę na forum staram się poszukać w Google, ale nie za bardzo mogę sobie z tym poradzić. Pracuje na Windowsie i klucz publiczny mam w folderze "klucze" w katalogu z kodem. Chciałbym zaszyfrować 3 kluczami. Mogę prosić o pomoc w poprawie tego kodu żeby mu dział
$plik;
$gpg_path = '/usr/bin/gpg'; // (nie rozumien tej sciezki)
putenv("GNUPGHOME=/home/user_name/.gnupg"); // (oraz tej)
$eplik = shell_exec("echo $plik| $ gpg_path -e -r ");
$zaszyfrowanyplik=$eplik;
Ta pierwsza linijka to przypisanie zmiennej $gpg_path
wartości na ścieżkę pliku gpg.exe (w Windows) - wpisz ścieżkę do gpg.exe.
Ta druga linijka to wprowadzenie pewnej zmiennej środowiskowej (GNUPGHOME) - wpisz tam swój katalog domowy GPG (tam gdzie masz keyring).
Dziękuje za pomoc,ale nadal coś mi nie wychodzi
<?php
$plik="tekst";
$gpg_path = 'C:\Program Files (x86)\GNU\GnuPG\gpg.exe'; // (nie rozumien tej sciezki)
putenv("GNUPGHOME=D:\Praca\Klucze.gnupg"); // (oraz tej)
$eplik = shell_exec("echo $plik| $ gpg_path -e -r ");
echo $eplik;
?>
U mnie zadziałało coś takiego:
<?php
$plik="tekst";
$gpg_path = 'C:\Program Files (x86)\GNU\GnuPG\pub\gpg.exe';
putenv("GNUPGHOME=D:\\Praca\\Klucze.gnupg");
$recipient = 'C27E20F1';
$eplik = shell_exec('echo $plik | "' . $gpg_path . '" -e -r ' . $recipient);
echo $eplik;
?>
Nie działa, bo argument -r wymaga podania adresu odbiorcy. W tym momencie zrobiłem sobie zmienną i użyłem mojego identyfikatora.
I nie działa, bo musisz dać podwójne backslashe w ścieżkach, bo w tym momencie tutaj \P i \K były traktowane jak symbole ucieczki.
I nie działa, bo przynajmniej u mnie gpg.exe jest w innym katalogu, tutaj masz poprawną (według mnie) ścieżkę.
I oczywiście musisz zadbać, żeby w katalogu D:\Praca\Klucze.gnupg znajdowały się pliki secring.gpg i pubring.gpg, bo bez tego nie pójdzie.
I polecam jeszcze dorzucić parametr -a do wywołania GPG (przed -e), żeby opakowywał w ASCII-armor, bo forma szyfrowania w postaci szeregu brzydkich (także niedrukowalnych) znaków zapewne nie będzie dla ciebie dobra.
gdzie znajdę pliki secring.gpg i pubring.gpg, i co to jest $recipient? Ja mam ściągnięta Kleopatr bo głownie na niej pracowałem ale muszę teraz wstawić szyfrowanie do kodu.
PS: czy nie powinno być jakieś ścieżki do klucza publicznego np Jan_Kowalski.asc ?
pubring i secring tworzone są domyślnie przez twoją instalację GPG. Do tych zbiorów kluczy musisz sobie klucze publiczne/prywatne zaimportować wcześniej. Dlatego też nie ma ścieżki do klucza.
$recipient to adres e-mail lub identyfikator klucza odbiorcy wiadomości.
Jest to kod w Pythonie i chciałbym mniejwiecej szyfrowanie zrobić w taki sam sposób ale w PHP.
def import_key(filename):
key_data = open(filename).read()
gpg.import_keys(key_data)
def encrypt_file(fname, recipients):
with open(fname, 'rb') as f:
status = gpg.encrypt_file(
f, recipients=recipients, always_trust=True,
output=fname+'.gpg')
print 'ok: ', status.ok
print 'status: ', status.status
print 'stderr: ', status.stderr
if __name__ == '__main__':
if len(sys.argv) < 2:
print "Usage: %s YYYY-mm-DD" % sys.argv[0]
sys.exit(0)
#y
gpg = gnupg.GPG(gnupghome='/home/testgpguser/gpghome')
key_data = open('/opt/pgpkeys/Jan_Kowalski.asc').read()
import_result = gpg.import_keys(key_data)
#pprint(import_result.results)
public_keys = gpg.list_keys()
private_keys = gpg.list_keys(True)
print 'public keys:'
pprint(public_keys)
print 'private keys:'
pprint(private_keys)