commit 03eb6a68660664fdc45934404d1b3a06cc23d51c
parent 9fa92a533c32c17354fee573638b41920f24551f
Author: anna <anna@brokenlove.online>
Date: Fri, 26 Jul 2024 23:54:44 +0200
c2 fixups, c3 done
Diffstat:
M | s1/c2.c | | | 30 | +++++++++++++++--------------- |
A | s1/c3.c | | | 45 | +++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 60 insertions(+), 15 deletions(-)
diff --git a/s1/c2.c b/s1/c2.c
@@ -1,19 +1,19 @@
#include <ba.h> /* see my tools repo for this */
int main(int argc, char* argv[]) {
- if(argc != 3)
- return -1;
- ba* a;
- ba* b;
- a = ba_from_hex(argv[1]);
- b = ba_from_hex(argv[2]);
- if (a == NULL || b == NULL) {
- return -1;
- }
- ba_xor(a, b);
- ba_fprint(a, stdout, 0);
- printf("\n");
- ba_free(a);
- ba_free(b);
- return 0;
+ if (argc != 3)
+ return -1;
+ ba* a;
+ ba* b;
+ a = ba_from_hex(argv[1]);
+ b = ba_from_hex(argv[2]);
+ if (a == NULL || b == NULL) {
+ return -1;
+ }
+ ba_xor(a, b);
+ ba_fprint(a, stdout, 0);
+ printf("\n");
+ ba_free(a);
+ ba_free(b);
+ return 0;
}
diff --git a/s1/c3.c b/s1/c3.c
@@ -0,0 +1,45 @@
+#include <ba.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+int score_english(ba *text)
+{
+ int res = 0;
+ for (int i = 0; i < text->len; i++)
+ res += isalnum((text->val)[i]) || isspace((text->val)[i]);
+ return res;
+}
+
+int main(int argc, char* argv[]) {
+ if (argc != 2)
+ return -1;
+
+ ba *ct;
+ ba *key;
+ ct = ba_from_hex(argv[1]);
+ uint8_t best_key;
+ int max = 0;
+ if (!ct)
+ return -1;
+ printf("decrypting...\n");
+ for (uint16_t i = 0; i < 0xff; i++) {
+ char buf[2*(ct->len)];
+ snprintf(buf, 16, "%2x", i);
+ key = ba_from_hex_n(buf, ct->len);
+ ba_xor(key, ct);
+ int sc = score_english(key);
+ if (sc > max) {
+ max = sc;
+ best_key = i;
+ }
+ }
+
+ char buf[2*(ct->len)];
+ snprintf(buf, 16, "%2x", best_key);
+ key = ba_from_hex_n(buf, ct->len);
+ ba_xor(key, ct);
+ ba_fprint_ascii(key, stdout, 0);
+ printf("\n");
+
+ ba_free(ct);
+}