Blowfish是一个對稱密鑰加密分组密码算法,由布魯斯·施奈爾於1993年设计,现已应用在多种加密产品。Blowfish算法由於分組長度太小已被認為不安全,施奈尔更建议在现代应用中使用Twofish密码。
施奈爾设计的Blowfish算法用途广泛,意在替代老舊的DES及避免其他算法的問題與限制。Blowfish刚刚研发出的时候,大部分其他加密算法是专利所有的或属于商业(政府)机密,所以发展起来非常受限制。施奈爾则声明Blowfish的使用没有任何限制,任何国家任何人任何时候都可以随意使用Blowfish算法。
Blowfish主要包括关键的几个S盒和一个复杂的核心变换函数。
Blowfish的伪代码
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 encrypt (uint32_t & L, uint32_t & R) {
for (int i=0 ; i 0 ; i -= 2) {
L ^= P[i+1];
R ^= f(L);
R ^= P[i];
L ^= f(R);
}
L ^= P[1];
R ^= P[0];
swap (L, R);
}
// ...
// initializing the P-array and S-boxes with values derived from pi; omitted in the example
// ...
{
for (int i=0 ; i
参考资料
评论 (0)