[bash] Kryptografia

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

[bash] Kryptografia

Post autor: skowron-line »

Witam dostałem do napisania program na zaliczenia, który po wetknięciu w gniazdo pendrajwa odczytuje plik z niego, a z pliku haszyfrowane haslo i porownuje z zadanym z listy.

Moje pytanie brzmi czy jest jakas wbudowana funkcja do szyfrowania?? I jak tego uzywac??

Z gory dziekuje i pozdrawiam
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Bash, jak można się było spodziewać, nie posiada wbudowanej funkcji do szyfrowania - trzeba się posłużyć zewnętrznymi programami. Wszystko zależy od tego, jakiego algorytmu szyfrującego chcemy użyć. Do szyfrowania można wykorzystać GPG, do obliczania funkcji haszujących można użyć programów md5sum, sha1sum (czy ogólnie shaxsum).
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

a czy przypadkiem md5sum nie oblicza sumy kontrolnej pliku??
jak ta funkcja zahaszowac ciag znakow????
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Kod: Zaznacz cały

$ echo -n "Ala ma kota" | md5sum
91162629d258a876ee994e9233b2ad87  -
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

@el.pescado a mam pytanie o co chodzi z tym minusem na koncu ??
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Ten minus oznacza, że dane były czytane ze standardowego wejścia, w odróżnieniu od pliku. W tym ostatnim przypadku w miejsce minusa pojawi się nazwa pliku.
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

Witam podrąże jeszcze temat. a co z funkcja base64 mozna przy jej pomocy zaszyfrowac / odszyfrowac ciag znaków z tym ze.
http://pl.wikipedia.org/wiki/Base64#Kodowanie
w łatwy sposób można obliczyć jaki ciąg znaków został zaszyfrowany.
wiec czy lepiej użyć md5sum czy base64 ???
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

W repozytoriach nie ma chyba żadnego programu do kodowania base64, można poszukać czegoś np. na freshmeat, albo napisać skrypt w perlu czy php.

W każdym razie, nazywanie tego szyfrowaniem jest trochę na wyrost - to po prostu kodowanie. Mając tekst zakodowany base64, bez problemu można otrzymać tekst wyjściowy.
Natomiast w przypadku md5, na wyjściu otrzymamy tzw. skrót wiadomości, na którego podstawie nie można obliczyć oryginalnej wiadomości. tak więc, dysponując np. dwoma skrótami haseł, można porównać, czy hasła są takie same (z dużym prawdopodobieństwem), natomiast nie można odczytać żadnego z nich.

Base64 ma zupełnie inne zastosowanie. Chcąc przesłać dowolne dane binarne (obraz, dźwięk), przez medium przeznaczone do przesyłania danych tekstowych (np. poczta elektroniczna), trzeba przetworzyć dane binarne w jakąś tekstową reprezentację (żeby np. niedrukowalne znaki kontrolne niczego nie popsuły). I w takim celu stosuje się m.in. base64.

Do haseł bym, w każdym razie, base64 nie używał, poza specyficznymi przypadkami. Pozostaje wybór między funkcją haszującą, jak MD5 czy SHA, a "normalnym" szyfrem.
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

Witam mam jeszcze pytanie jak uzyć tego skryptu
http://search.cpan.org/src/MATTBM/Crypt ... fish_PP.pm
ponizej opis
http://search.cpan.org/~mattbm/Crypt-Bl ... fish_PP.pm

w programie z bash-a ?? jak przekazac zmienne do tych metod i jak uzskac wynik ktore one zwracaja??


pzdr.
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Trzeba napisać pomocniczy skrypt w Perlu, coś w stylu:

Kod: Zaznacz cały

use Crypt::Blowfish_PP;

$blowfish=new Crypt::Blowfish_PP($ARGV[0]);

print $blowfish->encrypt($ARGV[1]);
Taki program, uruchomiony poleceniem "perl nazwaskryptu.pl klucz tekst" wypisze na standardowe wyjście zaszyfrowany tekst. Można oczywiście zmodyfikować skrypt, tak by czytał dane ze standardowego wejścia, ale ogólna idea jest ta sama.
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

@el.pescado a jak ta wartosc przypisac do zmiennej??

Kod: Zaznacz cały

 
ZMIENNA=$blowfish->encrypt($ARGV[1]);
echo $ZMIENNA
szczerze mowiąc niebardzo wiem co i jak
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Tworzysz pomocniczy skrypt w perlu, np: blowfish.pl, w którym wpisujesz:

Kod: Zaznacz cały

use Crypt::Blowfish_PP;

$blowfish=new Crypt::Blowfish_PP($ARGV[0]);

print $blowfish->encrypt($ARGV[1]);
Następnie, w bashu, wywołujesz ten skrypt perlowy:

Kod: Zaznacz cały

MSG=`perl blowfish.pl "tajny_klucz" "wiadomość"`
Wtedy w bashowej zmiennej MSG mamy zaszyfrowaną wiadomość. Zmienna $blowfish jest zmienną perla, więc nie można jej odczytać w bashu.
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

el.pescado zrobiłem tak ( dodałem to "my" bo wypatrzyłem to w pliku blowfish.t )

Kod: Zaznacz cały

use Crypt::Blowfish_PP;
my $bf=new Crypt::Blowfish_PP($ARGV[0]);
print $bf->encrypt($ARGV[1]);
z tym ze po odpaleniu skryptu bash dostaje error

can't call method encrypt on empty value

no niebardzo wiem co i jak tzn wiem ze zmienna $bf jest pusta ale dlaczego ??
może trzeba jakoś dodać ten plik "Blowfish_PP.pm"
do tego skryptu pomocnieczego ???
Awatar użytkownika
NoName_1990
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 28 lut 2007, 18:01
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86

Odp: [bash] Kryptografia

Post autor: NoName_1990 »

skowron-line pisze:el.pescado zrobiłem tak ( dodałem to "my" bo wypatrzyłem to w pliku blowfish.t )

Kod: Zaznacz cały

use Crypt::Blowfish_PP;
my $bf=new Crypt::Blowfish_PP($ARGV[0]);
print $bf->encrypt($ARGV[1]);
z tym ze po odpaleniu skryptu bash dostaje error

can't call method encrypt on empty value

no niebardzo wiem co i jak tzn wiem ze zmienna $bf jest pusta ale dlaczego ??
może trzeba jakoś dodać ten plik "Blowfish_PP.pm"
do tego skryptu pomocnieczego ???
skowron-line, myślę, że nie chodzi o to, że $bf jest puste (bo nie jest :p), tylko że $ARGV[1] jest puste. Spróbuj odpalić ten skrypt z jakimś parametrem, który zostanie odczytany jako $ARGV[1]
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

@NoName_1990 zrobilem tak jak mowiles podstawilem wartosci pod zmienne

Kod: Zaznacz cały

use Crypt::Blowfish_PP;
my $bf=new Crypt::Blowfish_PP('klucz');
print $bf->encrypt('wiadomosc');
i teraz mam

Kod: Zaznacz cały

Can't use method "encrypt" on an undefined value at line 3
 print $bf->encrypt( 'wiadonosc');
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Zrób:

Kod: Zaznacz cały

#!/usr/bin/perl -w;
use Crypt::Blowfish_PP;
use strict;
my $bf=new Crypt::Blowfish_PP('klucz');
print $bf->encrypt('wiadomosc');
Powinno spowodować wypisanie większej ilości informacji podczas wykonania programu.

P.S. moduł Crypt::Blowfish_PP masz?
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

parametr -w nic nie pokazal ( nic co mozna by byc pomocne )
el.pescado pisze:Zrób:

Kod: Zaznacz cały

#!/usr/bin/perl -w;
P.S. moduł Crypt::Blowfish_PP masz?[/quote]

Mam te pliki co byly w paczce do ktorej link dalem kilka postow wyzej
- CHANGELOG
- MANIFEST
- README
- Makefile.PL
- Blowfish_PP.pm
- t [ dir ]
  - blowfish.t

i tylko tyle wczesniej wyczytalem ze plik Blowfish_PP.pm musi byc w folderze crypto ale to nic nie daje


p.s A może ktos pokaze jakis skrypt perl odpalany pod bashem z parametrem

@NoName_1990 to napewno zmienna $bf poniewaz napisalem najbanalniejszy skrypt przekazujacy parametr i wyswietlajacy i dziala tak jak powinien ze zmienna tablicowa $ARGV[0]
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Mam te pliki co byly w paczce do ktorej link dalem kilka postow wyzej
Moduły perlowe najlepiej instalować za pomocą CPAN.

Kod: Zaznacz cały

sudo cpan
... za pierwszym razem program zapyta o konfigurację tego i owego ...
> install Crypt::Blowfish_PP
> quit[/quote]

Udało mi się uruchomić ten (mój;D) skrypt. W sumie dobrze jest poczytać dokumentację: [quote]The key is anywhere between 64 and 448 bits (8 and 56 bytes),[/quote]
To jest powód, dla którego nie działa - "klucz" to nie jest 8 bajtów.
[quote]encrypt(block)

The encrypt() method uses the initialised blowfish object to encrypt [b]8 bytes[/b] of data of the string passed to it. It returns the encrypted block.[/quote]
skowron-line
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 01 paź 2007, 15:22
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME

Odp: [bash] Kryptografia

Post autor: skowron-line »

A uruchomilem skrytp z katalogu "t"
i idac tym tropem napisalem skrypt

Kod: Zaznacz cały

#!/usr/bin/perl
use Crypt::Blowfish_PP;

my $bf=new Crypt::Blowfish_PP(pack("H*","014933E0CDAFF6E4"));
print "not" if(!defined($bf));

my $in;

$in=$bf->encrypt("skowron");

print $in;
print "\n";

print $bf->decrypt($in);
który dziala elegancko
ale jak juz odpale ten wczesniej z przekazywaniem zmiennych do pliku to juz nie chce działać
wczesniej mialem rozszezenie .pl a zmienilem na .t ale to tez nie pomogło.


EDIT // -----------------------

Kod: Zaznacz cały

use Crypt::Blowfish_PP;
my $bf=new Crypt::Blowfish_PP($ARGV[0]);
print $bf->encrypt($ARGV[1]);
zadzialalo tak

Kod: Zaznacz cały

use Crypt::Blowfish_PP;
my $bf=new Crypt::Blowfish_PP(pack("h16",$ARGV[0]));
print $bf->encrypt($ARGV[1]);
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] Kryptografia

Post autor: el.pescado »

Żeby zakodować więcej niż jeden blok, można użyć modułu Crypt::CBC:

Kod: Zaznacz cały

#!/usr/bin/perl -w

use strict;
use Crypt::CBC;

$cipher = Crypt::CBC->new( -key    => 'my secret key',
                           -cipher => 'Blowfish'
                         );

$ciphertext = $cipher->encrypt("This data is hush hush");
$plaintext  = $cipher->decrypt($ciphertext);
print "$plaintext\n";
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości