السلام عاوز كود جاهز لي خوازميه blowfish...لانوا جربت كذا كود وغلط ...علمآ انا شغال بالNot Baines
خوارزميات
هذا الكود المقدم من ويكبيديا
uint32_t P[18];
uint32_t S[4][256];
uint32_t f (uint32_t x) {
uint32_t h = S[0][x >> 24] + S[1][x >> 16 & 0xff];
return ( h ^ S[2][x >> 8 & 0xff] ) + S[3][x & 0xff];
}
void blowfish_encrypt(uint32_t *L, uint32_t *R) {
for (short r = 0; r < 16; r++) {
*L = *L ^ P[r];
*R = f(*L) ^ *R;
swap(L, R);
}
swap(L, R);
*R = *R ^ P[16];
*L = *L ^ P[17];
}
void blowfish_decrypt(uint32_t *L, uint32_t *R) {
for (short r = 17; r > 1; r--) {
*L = *L ^ P[r];
*R = f(*L) ^ *R;
swap(L, R);
}
swap(L, R);
*R = *R ^ P[1];
*L = *L ^ P[0];
}
// ...
// initializing the P-array and S-boxes with values derived from pi; omitted in the example (you can find them below)
// ...
{
/* initialize P box w/ key*/
uint32_t k;
for (short i = 0, p = 0; i < 18; i++) {
k = 0x00;
for (short j = 0; j < 4; j++) {
k = (k << 8) | (uint8_t) key[p];
p = (p + 1) % key_len;
}
P[i] ^= k;
}
/* blowfish key expansion (521 iterations) */
uint32_t l = 0x00, r = 0x00;
for (short i = 0; i < 18; i+=2) {
blowfish_encrypt(&l, &r);
P[i] = l;
P[i+1] = r;
}
for (short i = 0; i < 4; i++) {
for (short j = 0; j < 256; j+=2) {
blowfish_encrypt(&l, &r);
S[i][j] = l;
S[i][j+1] = r;
}
}
}
التعليقات