changing pc
This commit is contained in:
parent
06aabe1dbf
commit
742db2cf2a
6 changed files with 155 additions and 29 deletions
70
src/main.c
70
src/main.c
|
@ -3,8 +3,9 @@
|
|||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
/* nuke sign from signed char */
|
||||
#define REMOVE_SIGN(x) ( \
|
||||
(x) & ~ (1u << 8)\
|
||||
((x) & ~ (1u << 8))\
|
||||
)
|
||||
|
||||
#define SIZE_ALPH 26
|
||||
|
@ -15,16 +16,17 @@ static char *e1(char *, char);
|
|||
static char *d1(char *, char);
|
||||
static inline char gen1();
|
||||
|
||||
static char *e2(char *, char*);
|
||||
static char *d2(char *, char*);
|
||||
static char *e2(char *, char *);
|
||||
static char *d2(char *, char *);
|
||||
static char *gen2();
|
||||
|
||||
static char *e3(char *, char*);
|
||||
static char *d3(char *, char*);
|
||||
static char *e3(char *, char *);
|
||||
static char *d3(char *, char *);
|
||||
static char *gen3();
|
||||
|
||||
static inline char genChar();
|
||||
static inline char genByte();
|
||||
static void printHex(char *);
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
|
@ -32,6 +34,7 @@ main(int argc, char *argv[])
|
|||
srand(time(0)); /* init rand */
|
||||
|
||||
|
||||
#ifdef PART1
|
||||
printf("-------PART 1-------\n");
|
||||
int key = gen1();
|
||||
/* SYMBOLS */
|
||||
|
@ -58,7 +61,9 @@ main(int argc, char *argv[])
|
|||
|
||||
free(cypher32);
|
||||
free(res32);
|
||||
#endif
|
||||
|
||||
#ifdef PART2
|
||||
/* PART 2 */
|
||||
printf("-------PART 2-------\n");
|
||||
char *key_otp = gen2();
|
||||
|
@ -68,8 +73,12 @@ main(int argc, char *argv[])
|
|||
"ceciestlemessageclairadechiffreilcomporte64charcestplutotlongxd";
|
||||
printf("key: %s\n", key_otp);
|
||||
printf("msg before: %s\n", msg_otp);
|
||||
printf("msg as hex: ");
|
||||
printHex(msg_otp);
|
||||
char *cypher_otp = e2(msg_otp, key_otp);
|
||||
printf("cypher: %s\n", cypher_otp);
|
||||
printf("cypher as hex: ");
|
||||
printHex(cypher_otp);
|
||||
char *res_otp = d2(cypher_otp, key_otp);
|
||||
printf("msg after: %s\n", res_otp);
|
||||
|
||||
|
@ -77,6 +86,9 @@ main(int argc, char *argv[])
|
|||
free(res_otp);
|
||||
free(key_otp);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef PART3
|
||||
/* PART 3 */
|
||||
printf("-------PART 3-------\n");
|
||||
char *key_vignere = gen3();
|
||||
|
@ -92,6 +104,7 @@ main(int argc, char *argv[])
|
|||
free(res_vignere);
|
||||
free(cypher_vignere);
|
||||
free(key_vignere);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -99,8 +112,8 @@ main(int argc, char *argv[])
|
|||
char*
|
||||
e1(char *clearText, char key)
|
||||
{
|
||||
char *res = calloc(strlen(clearText), 1);
|
||||
for (short k = 0 ; clearText[k] != '\0' ; ++k) {
|
||||
char *res = (char *)calloc(strlen(clearText) + 1, 1);
|
||||
for (unsigned short k = 0 ; clearText[k] != '\0' ; ++k) {
|
||||
if (clearText[k] >= 'a' && clearText[k] <= 'z') /* we encrypt a-z */
|
||||
res[k] = (clearText[k] - 'a' + key) % 26 + 'a'; /* sign always + */
|
||||
else
|
||||
|
@ -112,12 +125,12 @@ e1(char *clearText, char key)
|
|||
char*
|
||||
d1(char *cypher, char key)
|
||||
{
|
||||
char *res = calloc(strlen(cypher), 1);
|
||||
for (short k = 0; cypher[k] != '\0' ; ++k) {
|
||||
char *res = (char *)calloc(strlen(cypher) + 1, 1);
|
||||
for (unsigned short k = 0; cypher[k] != '\0' ; ++k) {
|
||||
if (cypher[k] >= 'a' && cypher[k] <= 'z') {/* we decrypt a-z */
|
||||
/* in C, % is the rest, not modulo. We take care of the sign by
|
||||
* always setting the signed bit to false :) */
|
||||
res[k] = 'a' + REMOVE_SIGN((cypher[k] - 'a' - key)) % 26;
|
||||
res[k] = 'a' + REMOVE_SIGN(cypher[k] - 'a' - key) % 26;
|
||||
}
|
||||
else
|
||||
res[k] = cypher[k];
|
||||
|
@ -134,9 +147,9 @@ gen1()
|
|||
static inline char*
|
||||
e2(char *cypher, char *pad)
|
||||
{
|
||||
char *res = calloc(SIZE_OTP, 1);
|
||||
char *res = (char *)calloc(SIZE_OTP, 1);
|
||||
/* loop unwraping, might help cpu / compilator to use parallelisation */
|
||||
for (char k = 0 ; k <= SIZE_OTP - 8 ; k = k + 8) {
|
||||
for (unsigned char k = 0 ; k <= SIZE_OTP - 8 ; k = k + 8) {
|
||||
res[k] = cypher[k] ^ pad[k];
|
||||
res[k + 1] = cypher[k + 1] ^ pad[k + 1];
|
||||
res[k + 2] = cypher[k + 2] ^ pad[k + 2];
|
||||
|
@ -153,10 +166,10 @@ e2(char *cypher, char *pad)
|
|||
static inline char*
|
||||
d2(char *clearText, char *pad)
|
||||
{
|
||||
char *res = calloc(SIZE_OTP, 1);
|
||||
char *res = (char *)calloc(SIZE_OTP, 1);
|
||||
/* loop unwraping, might help cpu / compilator to use parallelisation
|
||||
* NOTE prob gcc / clag already does that as a default, now we sure */
|
||||
for (char k = 0 ; k <= SIZE_OTP - 8 ; k = k + 8) {
|
||||
for (unsigned char k = 0 ; k <= SIZE_OTP - 8 ; k = k + 8) {
|
||||
res[k] = clearText[k] ^ pad[k];
|
||||
res[k + 1] = clearText[k + 1] ^ pad[k + 1];
|
||||
res[k + 2] = clearText[k + 2] ^ pad[k + 2];
|
||||
|
@ -173,8 +186,8 @@ d2(char *clearText, char *pad)
|
|||
static char*
|
||||
gen2()
|
||||
{
|
||||
char *res = calloc(sizeof(char) * SIZE_OTP, 1);
|
||||
for (char k = 0 ; k <= SIZE_OTP - 8 ; k = k + 8) {
|
||||
char *res = (char *)calloc(sizeof(char) * SIZE_OTP, 1);
|
||||
for (unsigned char k = 0 ; k <= SIZE_OTP - 8 ; k = k + 8) {
|
||||
res[k] = genByte();
|
||||
res[k + 1] = genByte();
|
||||
res[k + 2] = genByte();
|
||||
|
@ -185,6 +198,8 @@ gen2()
|
|||
res[k + 7] = genByte();
|
||||
}
|
||||
|
||||
res[SIZE_OTP - 1] = '\0';
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -197,8 +212,8 @@ genByte()
|
|||
static char*
|
||||
e3(char *cypher, char *key)
|
||||
{
|
||||
char *res = calloc(sizeof(char) * SIZE_MSG, 1);
|
||||
for(char k = 0 ; k <= SIZE_MSG - 8 ; k = k + 8) {
|
||||
char *res = (char *)calloc(sizeof(char) * SIZE_MSG, 1);
|
||||
for(unsigned char k = 0 ; k <= SIZE_MSG - 8 ; k = k + 8) {
|
||||
/* we remove 2*a since cypher AND key contain 'a' */
|
||||
res[k] = (cypher[k] + key[k] - 2 * 'a') % SIZE_ALPH + 'a';
|
||||
res[k + 1] = (cypher[k + 1] + key[k + 1] - 2 * 'a') % SIZE_ALPH + 'a';
|
||||
|
@ -217,8 +232,8 @@ e3(char *cypher, char *key)
|
|||
static char*
|
||||
d3(char *cypher, char *key)
|
||||
{
|
||||
char *res = calloc(sizeof(char) * SIZE_MSG, 1);
|
||||
for(char k = 0 ; k <= SIZE_MSG - 8 ; k = k + 8) {
|
||||
char *res = (char *)calloc(sizeof(char) * SIZE_MSG, 1);
|
||||
for(unsigned char k = 0 ; k <= SIZE_MSG - 8 ; k = k + 8) {
|
||||
/* we DONT remove 'a' since cypher AND key contain 'a' */
|
||||
res[k] = REMOVE_SIGN(cypher[k] - key[k]) % SIZE_ALPH + 'a';
|
||||
res[k + 1] = REMOVE_SIGN(cypher[k + 1] - key[k + 1]) % SIZE_ALPH + 'a';
|
||||
|
@ -243,8 +258,8 @@ genChar()
|
|||
static char*
|
||||
gen3()
|
||||
{
|
||||
char *res = calloc(sizeof(char) * SIZE_MSG, 1);
|
||||
for (char k = 0 ; k <= SIZE_MSG - 8 ; k = k + 8) {
|
||||
char *res = (char *)calloc(sizeof(char) * SIZE_MSG, 1);
|
||||
for (unsigned char k = 0 ; k <= SIZE_MSG - 8 ; k = k + 8) {
|
||||
res[k] = genChar() + 'a';
|
||||
res[k + 1] = genChar() + 'a';
|
||||
res[k + 2] = genChar() + 'a';
|
||||
|
@ -258,3 +273,14 @@ gen3()
|
|||
res[SIZE_MSG - 1] = '\0';
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
printHex(char *str)
|
||||
{
|
||||
short k = 0;
|
||||
while (str[k] != '\0') {
|
||||
printf("%02X ", str[k]);
|
||||
++k;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue