libCypther - biblioteka

0

Witam, chciałbym zaprezentować Wam mini bibliotekę służącą szyfrowaniu i deszyfrowaniu wiadomości.
Biblioteka służy szyfrowaniu symetrycznemu.

W algorytmach symetrycznych (ang. symmetric algorithms) nazywanych również algorytmami z kluczem tajnym, klucze szyfrujący i deszyfrujący są takie same (lub jeden można łatwo wyprowadzić z drugiego).

Szyfrowanie opiera się o algorytm XOR .
Moc kryptograficzna tego szyfru zależy od długości klucza oraz od długości tekstu ,
im dłuższy tekst tym bardziej bezpieczna wiadomość

Załączam krótki kod:

 
#include <iostream>
#include "Cypher.hpp"
using namespace std;
int main(void)
{
string tekst;//deklaracja string'a
getline(cin, tekst);//wprowadzamy tekst
CCypher obiekt1;//tworzymy obiekt klasy szyfrujacej
DeCypher obiekt2;//tworzymy obiekt klasy deszyfrujacej
///******///
obiekt1.Cypher(tekst);//wywolujemy metode szyfrujaca gdzie jako argument
//podajemy dowolny lancuch znakow (string) z tekstem do zaszyfrowania
///******///
obiekt2.Decypher( obiekt1.crypt_msg, obiekt1.crypt_key);
//wywolujemy metode deszyfrujaca gdzie jako argumenty lancuch znakow (string)
//z zaszyforwana wiadomoscia a drugi argument to klucz sluzacy do deszyfracji
//-------------------------------------------------
// zmienna crypt_key to string zawierajacy klucz ktory posluzyl do deszyfrowania wiadomosci
// zmienna crypt_msg to string zawierajacy zaszyfrowana wiadomosc
///*Oby dwie zmienne zwrocila metoda Cypher(tekst) (patrz 11 linijka)
///*******///
cout << obiekt2.wynik<<endl<<endl;//W zmiennej wynik znajduje się wynik operacji deszyfrowania czyli tekst
system("pause");
return 0;
}

Myślę że komentarze w kodzie wszystko wyjaśniły ewentualnie pytać śmiało.
Biblioteka w załączniku miłego korzystania.
Więcej informacji o kryptografii tutaj:
http://www.b-skrzypczyk.republika.pl/alg_sym.html
#EDIT 1
Niestety biblioteka nie obsługuje polskich znaków - ;(

0

Mieszasz polskie nazwy i angielskie - po co? Albo robisz lib'ke tylko dla polaków albo dla całego świata. W szybkim podglądzie libCypher.a widziałem coś takiego:

0 1 0000000 0000001 0000010 2 0000011 3 0000100 4 0000101 5 0000110 6 0000111 7 0001000 8 0001001 9 0001011 A 0001100 a 0001101 B 0001110 b 0001111 C 0010000 c 0010001 D 0010010 d 0010011 E 0010100 e 0010101 F 0010110 f 0010111 G 0011000 g 0011001 H 0011010 h 0011011 I 0011100 i 0011101 J 0011110 j 0011111 K 0100000 k 0100001 L 0100010 l 0100011 M 0100100 m 0100101 N 0100110 n 0100111 O 0101000 o 0101001 P 0101010 p 0101011 R 0101100 r 0101101 S 0101110 s 0101111 T 0110000 t 0110001 U 0110010 u 0110011 W 0110100 w 0110101 Y 0110110 y 0110111 Z 0111000 z 0111011   0111010 . ? 0111100 ! 0111101 @ 0111110 # 0111111 $ 1000000 % 1000001 ^ 1000010 & 1000011 * 1000100 ( 1000101 ) 1000110 - 1000111 _ 1001000 = 1001001 + 1001010 | 1001011 ` 1001100 ~ 1001101 q 1010111 Q 1011000 ¹ 1011001 ¥ 1011010 œ 1011011 Œ 1011100 ¿ 1011101 ¯ 1011110 Ÿ 1011111  1100000 ñ 1100001 Ñ 1100010 ó 1100011 Ó 1100100 Ê 1100110 ê 1100111 æ 1101000 Æ 1101001 ł 1101010 Š1101011 , 1101100 v 1101101 V 001 0001

Chyba nie zrozumiałeś algorytmu...
Nie testowałem tej biblioteki, ale wydaje się mało użyteczna.

0

Ta biblioteka jest niestety bezużyteczna w jakimkolwiek sensownym zastosowaniu, zwykłe XORowanie to niepoważnie słaby kryptograficznie algorytm. W miejscu, gdzie potrzebny jest szyfr symetryczny lepiej zastosować AESa, jego stopień skomplikowania jednak kilkukrotnie przerasta w/w algorytm...

Ad. sama biblioteka:

  1. Chyba po to używasz obiektów, żeby klucz deszyfrujący puszczać konstruktorem/setterem?
  2. Zamiast zwracać stringa wrzucasz go do publicznego pola, po co? :(
  3. system("pause");? Za jakie grzechy?
0

zwykłe XORowanie to niepoważnie słaby kryptograficznie algorytm.

Jeśli algorytm szyfrowania spełni te 3 warunki może być bezwarunkowo bezpieczny.

hasło musi być ciągiem losowym
hasło musi być jednorazowe
długość hasła musi być przynajmniej tak samo długa jak długość szyfrowanego tekstu

0

Super, przez konieczność stosowania klucza o tej samej długości, co szyfrowana wiadomość odpada Ci większość życiowych zastosowań takiego szyfru. Jest po prostu cholernie upierdliwy przez problem dystrybucji kluczy.

0

I co z tego... Jak to zapewne nie jest XOR z prawdziwego zdarzenia. Możesz zaszyfrować dla mnie ciąg "Ala ma kota" kluczem "Ala ma kota"? Napisz jaki jest wynik takiego szyfrowania, bo podejrzewam, że wynikowy string urośnie. Nie testowałem i szczerze mówiąc mi się nie chce ale jak widzę, że podstawisz za 0101010 coś innego to to nie może być dobre. Możesz wrzucić cały kod?

0

"Możesz zaszyfrować dla mnie ciąg "Ala ma kota" kluczem "Ala ma kota"?"

  • Niestety nie bo klucz jest generowany "na bieżąco".

"podstawisz za 0101010 coś innego to to nie może być dobre."

  • Ja uważam że może a podstawiam co innego bo szyfrowany jest każdy znak osobno więc "0101010" da nam PRZYKŁADOWO "0000010000100100000100000001000000100000010000000"
0

What? Przecież [bit] xor [bit] = [bit], na tej samej podstawie [bajt] xor [bajt] = [bajt]. Pokaż ten swój algorytm, jestem bardzo ciekaw jakim cudem zaszyfrowana wiadomość wychodzi dłuższa od niezaszyfrowanej...

0

Pewnie przez tabelkę wyżej - jak widzisz 7 znakowy plaintext został przerobiony na 49 ciphertext co daje 7 znaków na literę - te zaś są hardcodeowane w programie. Nie wiadomo jeszcze jak jest generowany klucz. i czy faktycznie te 7-znakowe bity są xorowane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1