Strona 1 z 2

[bash] Kryptografia

: 15 cze 2008, 10:29
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

Odp: [bash] Kryptografia

: 15 cze 2008, 17:06
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).

Odp: [bash] Kryptografia

: 15 cze 2008, 22:58
autor: skowron-line
a czy przypadkiem md5sum nie oblicza sumy kontrolnej pliku??
jak ta funkcja zahaszowac ciag znakow????

Odp: [bash] Kryptografia

: 16 cze 2008, 09:27
autor: el.pescado

Kod: Zaznacz cały

$ echo -n "Ala ma kota" | md5sum
91162629d258a876ee994e9233b2ad87  -

Odp: [bash] Kryptografia

: 16 cze 2008, 17:01
autor: skowron-line
@el.pescado a mam pytanie o co chodzi z tym minusem na koncu ??

Odp: [bash] Kryptografia

: 16 cze 2008, 17:08
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.

Odp: [bash] Kryptografia

: 18 cze 2008, 10:59
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 ???

Odp: [bash] Kryptografia

: 18 cze 2008, 12:32
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.

Odp: [bash] Kryptografia

: 22 cze 2008, 22:48
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.

Odp: [bash] Kryptografia

: 23 cze 2008, 10:12
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.

Odp: [bash] Kryptografia

: 23 cze 2008, 15:34
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

Odp: [bash] Kryptografia

: 24 cze 2008, 13:11
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.

Odp: [bash] Kryptografia

: 25 cze 2008, 00:45
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 ???

Odp: [bash] Kryptografia

: 25 cze 2008, 09:11
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]

Odp: [bash] Kryptografia

: 25 cze 2008, 16:59
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');

Odp: [bash] Kryptografia

: 25 cze 2008, 19:11
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?

Odp: [bash] Kryptografia

: 25 cze 2008, 21:58
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]

Odp: [bash] Kryptografia

: 26 cze 2008, 19:13
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]

Odp: [bash] Kryptografia

: 29 cze 2008, 14:30
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]);

Odp: [bash] Kryptografia

: 29 cze 2008, 21:48
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";