Compute normalized edit distance over the whole ciphertext
This commit is contained in:
parent
0bce806ec6
commit
bbfa502c91
1 changed files with 14 additions and 16 deletions
|
@ -7,24 +7,22 @@
|
||||||
#define BUF_SIZE 4096
|
#define BUF_SIZE 4096
|
||||||
|
|
||||||
double normalized_edit_distance(unsigned int keysize,
|
double normalized_edit_distance(unsigned int keysize,
|
||||||
const unsigned char buf[static keysize * 4]) {
|
const unsigned char buf[static keysize * 4],
|
||||||
char block1[keysize];
|
unsigned int blocks_count) {
|
||||||
char block2[keysize];
|
char blocks[blocks_count][keysize];
|
||||||
char block3[keysize];
|
|
||||||
char block4[keysize];
|
|
||||||
|
|
||||||
for (size_t i = 0; i < keysize; ++i) {
|
for (size_t i = 0; i < blocks_count; ++i) {
|
||||||
block1[i] = buf[i];
|
for (size_t j = 0; j < keysize; ++j) {
|
||||||
block2[i] = buf[keysize + i];
|
blocks[i][j] = buf[i * keysize + j];
|
||||||
block3[i] = buf[2 * keysize + i];
|
}
|
||||||
block4[i] = buf[3 * keysize + i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double dist1 = hamming(block1, block2) / (double)keysize;
|
double avg_dist = 0;
|
||||||
double dist2 = hamming(block2, block3) / (double)keysize;
|
for (size_t i = 0; i < blocks_count - 1; ++i) {
|
||||||
double dist3 = hamming(block3, block4) / (double)keysize;
|
avg_dist += hamming(blocks[i], blocks[i + 1]) / (double)keysize;
|
||||||
|
}
|
||||||
|
|
||||||
return (dist1 + dist2 + dist3) / 3;
|
return avg_dist / ((double)blocks_count - 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
@ -62,8 +60,8 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
unsigned int keysize = 40;
|
unsigned int keysize = 40;
|
||||||
double min_edit_dist = INFINITY;
|
double min_edit_dist = INFINITY;
|
||||||
for (unsigned int i = 40; i > 1; --i) {
|
for (unsigned int i = 30; i > 1; --i) {
|
||||||
double edit_dist = normalized_edit_distance(i, buf);
|
double edit_dist = normalized_edit_distance(i, buf, len / i);
|
||||||
if (edit_dist < min_edit_dist) {
|
if (edit_dist < min_edit_dist) {
|
||||||
min_edit_dist = edit_dist;
|
min_edit_dist = edit_dist;
|
||||||
keysize = i;
|
keysize = i;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue