Vissza

7. labor: a Rabin, SAEP rendszerek


1. A titkosított file Rabin módszerrel volt rejtjelezve, ahol a titkosítást bájtok felett végezték. Határozzuk meg az eredeti  TXT állományt, ha tudjuk, hogy a titkosításhoz használt két prímszám a keys.txt állomány valamelyik két értékével egyezik meg és ha a keys.txt állományban levő számok közül csak kettő prímszám. Tudjuk azt is, hogy az eredeti állomány 182 bájtot tartalmazott.

2. Írjunk programot, amely SAEP-vel titkosít és visszafejt egy tetszőleges 256 bites szekvenciát (SAEP-encrypt).

3. Határozzuk meg egy billentyűzetről beolvasott karakterlánc sha-256, sha-384-es értékeit, illetve egy tetszőleges bináris állomány sha256-os, sha384-es értékeit.

C++ kód:

#include <sha.h>
#include <iostream>

USING_NAMESPACE(CryptoPP)
using namespace std;

int main() {
    unsigned char *rS = (unsigned char*)"hello sapientia";
    long lR = strlen((char*)rS);
    long lH = 256 / 8;

    unsigned char h256[SHA256::DIGESTSIZE];
    SHA256().CalculateDigest(h256, rS, lR);

    cout << "hash 256: ";
    for (int i = 0; i < lH; ++i)
        cout << hex << (0xFF & h256[i]) << " ";
    cout << endl << endl;
    
    rS = (unsigned char*)"hello sapientia";
    lH = 384 / 8;
    unsigned char h384[SHA384::DIGESTSIZE];
    SHA384().CalculateDigest(h384, rS, lR);

    cout << "hash 384: ";
    for (int i = 0; i < lH; ++i)
        cout << hex << (0xFF & h384[i]) << " ";
    cout << endl << endl;
   
    return 0;
}

Java kód:
import java.security.MessageDigest;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;

public class Hash {

    public static void main(String[] args) throws Exception {

        String pswd = "hello sapientia";
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte [] digest = md.digest(pswd.getBytes(StandardCharsets.US_ASCII));
        String sha256 = DatatypeConverter.printHexBinary(digest).toLowerCase();
       
        System.out.println("hash 256: " + sha256);
       
        md = MessageDigest.getInstance("SHA-384");
        digest = md.digest(pswd.getBytes(StandardCharsets.US_ASCII));
        String sha384 = DatatypeConverter.printHexBinary(digest).toLowerCase();
       
        System.out.println("hash 384: " + sha384);
    }   
}