[java]代码库
interface RC5 {
public int keySize();
public long encrypt(long pt);
public long decrypt(long ct);
public void setup(byte[] K);
}
// RC5-32/12/8 implementation. Unrolls all important loops.
class RC5_32_12_8 implements RC5 {
private static final int w = 32; /* word size in bits */
private static final int r = 12; /* number of rounds */
private static final int b = 8; /* number of bytes in key */
private static final int c = 2; /* number words in key = ceil(8*b/w)*/
private static final int t = 26; /* size of table S = 2*(r+1) words */
// static int[] initS = new int[t];
static int initS0, initS1, initS2, initS3, initS4, initS5, initS6, initS7, initS8, initS9;
static int initS10, initS11, initS12, initS13, initS14, initS15, initS16, initS17, initS18, initS19;
static int initS20, initS21, initS22, initS23, initS24, initS25;
// int[] S = new int[t]; /* expanded key table */
int S0, S1, S2, S3, S4, S5, S6, S7, S8, S9;
int S10, S11, S12, S13, S14, S15, S16, S17, S18, S19;
int S20, S21, S22, S23, S24, S25;
private static final int P = 0xb7e15163, Q = 0x9e3779b9; /* magic constants */
static {
initS0 = P;
// for (int i = 1; i < t; i++) {
// initS[i] = initS[i-1] + Q;
// }
initS1 = initS0 + Q;
initS2 = initS1 + Q;
initS3 = initS2 + Q;
initS4 = initS3 + Q;
initS5 = initS4 + Q;
initS6 = initS5 + Q;
initS7 = initS6 + Q;
initS8 = initS7 + Q;
initS9 = initS8 + Q;
initS10 = initS9 + Q;
initS11 = initS10 + Q;
initS12 = initS11 + Q;
initS13 = initS12 + Q;
initS14 = initS13 + Q;
initS15 = initS14 + Q;
initS16 = initS15 + Q;
initS17 = initS16 + Q;
initS18 = initS17 + Q;
initS19 = initS18 + Q;
initS20 = initS19 + Q;
initS21 = initS20 + Q;
initS22 = initS21 + Q;
initS23 = initS22 + Q;
initS24 = initS23 + Q;
initS25 = initS24 + Q;
}
public int keySize()
{
return b;
}
// int ROTL(int x, int y)
// {
// return (x << (y & (w-1))) | (x >>> (w - (y & (w-1))));
// }
//
// int ROTR(int x, int y)
// {
// return (x >>> (y & (w-1))) | (x << (w - (y & (w-1))));
// }
public long encrypt(long pt)
{
int A = (int)(pt & 0xffffffffL) + S0;
int B = (int)(pt >>> 32) + S1;
// for (int i = 1; i <= r; i++) {
// int x = A ^ B;
// int y = B & (w-1);
// A = /*ROTL(A ^ B, B)*/ ((x << y) | (x >>> (w-y))) + S[2*i];
// x = B ^ A;
// y = A & (w-1);
// B = /*ROTL(B ^ A, A)*/ ((x << y) | (x >>> (w-y))) + S[2*i+1];
// }
int x, y;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S2 ; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S3 ;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S4 ; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S5 ;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S6 ; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S7 ;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S8 ; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S9 ;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S10; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S11;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S12; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S13;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S14; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S15;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S16; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S17;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S18; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S19;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S20; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S21;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S22; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S23;
x = A ^ B; y = B & (w-1); A = ((x << y) | (x >>> (w-y))) + S24; x = B ^ A; y = A & (w-1); B = ((x << y) | (x >>> (w-y))) + S25;
return ((long)B << 32) + (A & 0xffffffffL);
}
public long decrypt(long ct)
{
int A = (int)(ct & 0xffffffffL);
int B = (int)(ct >>> 32);
// for (int i = r; i > 0; i--) {
// int x = B - S[2*i+1];
// int y = A & (w-1);
// B = /*ROTR(B - S[2*i+1], A)*/ ((x >>> y) | (x << (w-y))) ^ A;
// x = A - S[2*i];
// y = B & (w-1);
// A = /*ROTR(A - S[2*i], B)*/ ((x >>> y) | (x << (w-y))) ^ B;
// }
int x, y;
x = B - S25; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S24; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S23; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S22; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S21; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S20; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S19; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S18; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S17; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S16; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S15; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S14; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S13; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S12; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S11; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S10; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S9 ; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S8 ; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S7 ; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S6 ; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S5 ; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S4 ; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
x = B - S3 ; y = A & (w-1); B = ((x >>> y) | (x << (w-y))) ^ A; x = A - S2 ; y = B & (w-1); A = ((x >>> y) | (x << (w-y))) ^ B;
return ((long)(B - S1) << 32) + ((A - S0) & 0xffffffffL);
}
public void setup(byte[] K)
{
int i, j, k, u=w/8, A, B;
/* Initialize L, then S, then mix key into S */
// for (i=b-1,L[c-1]=0; i!=-1; i--) L[i/u] = (L[i/u]<<8)+(K[i]&0xff);
int L0 = ((K[3] & 0xff) << 24) | ((K[2] & 0xff) << 16) | ((K[1] & 0xff) << 8) | (K[0] & 0xff);
int L1 = ((K[7] & 0xff) << 24) | ((K[6] & 0xff) << 16) | ((K[5] & 0xff) << 8) | (K[4] & 0xff);
// for (A=B=i=j=k=0; k<3*t; k++) { /* 3*t > 3*c */
// int x = S[i] + (A+B);
// A = S[i] = /*ROTL(S[i]+(A+B),3);*/ (x << 3) | (x >>> 29);
// x = L[j] + (A+B);
// int y = (A+B) & (w-1);
// B = L[j] = /*ROTL(L[j]+(A+B),(A+B));*/ (x << y) | (x >>> (w-y));
// /*i = (i+1) % t;*/ i++; if (i >= t) i = 0;
// /*j = (j+1) % c;*/ j++; if (j >= c) j = 0;
// }
A = B = 0;
int x, y;
x = initS0 + (A+B); A = S0 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS1 + (A+B); A = S1 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS2 + (A+B); A = S2 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS3 + (A+B); A = S3 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS4 + (A+B); A = S4 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS5 + (A+B); A = S5 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS6 + (A+B); A = S6 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS7 + (A+B); A = S7 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS8 + (A+B); A = S8 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS9 + (A+B); A = S9 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS10 + (A+B); A = S10 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS11 + (A+B); A = S11 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS12 + (A+B); A = S12 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS13 + (A+B); A = S13 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS14 + (A+B); A = S14 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS15 + (A+B); A = S15 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS16 + (A+B); A = S16 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS17 + (A+B); A = S17 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS18 + (A+B); A = S18 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS19 + (A+B); A = S19 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS20 + (A+B); A = S20 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS21 + (A+B); A = S21 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS22 + (A+B); A = S22 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS23 + (A+B); A = S23 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = initS24 + (A+B); A = S24 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = initS25 + (A+B); A = S25 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S0 + (A+B); A = S0 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S1 + (A+B); A = S1 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S2 + (A+B); A = S2 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S3 + (A+B); A = S3 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S4 + (A+B); A = S4 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S5 + (A+B); A = S5 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S6 + (A+B); A = S6 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S7 + (A+B); A = S7 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S8 + (A+B); A = S8 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S9 + (A+B); A = S9 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S10 + (A+B); A = S10 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S11 + (A+B); A = S11 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S12 + (A+B); A = S12 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S13 + (A+B); A = S13 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S14 + (A+B); A = S14 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S15 + (A+B); A = S15 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S16 + (A+B); A = S16 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S17 + (A+B); A = S17 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S18 + (A+B); A = S18 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S19 + (A+B); A = S19 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S20 + (A+B); A = S20 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S21 + (A+B); A = S21 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S22 + (A+B); A = S22 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S23 + (A+B); A = S23 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S24 + (A+B); A = S24 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S25 + (A+B); A = S25 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S0 + (A+B); A = S0 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S1 + (A+B); A = S1 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S2 + (A+B); A = S2 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S3 + (A+B); A = S3 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S4 + (A+B); A = S4 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S5 + (A+B); A = S5 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S6 + (A+B); A = S6 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S7 + (A+B); A = S7 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S8 + (A+B); A = S8 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S9 + (A+B); A = S9 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S10 + (A+B); A = S10 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S11 + (A+B); A = S11 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S12 + (A+B); A = S12 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S13 + (A+B); A = S13 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S14 + (A+B); A = S14 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S15 + (A+B); A = S15 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S16 + (A+B); A = S16 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S17 + (A+B); A = S17 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S18 + (A+B); A = S18 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S19 + (A+B); A = S19 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S20 + (A+B); A = S20 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S21 + (A+B); A = S21 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S22 + (A+B); A = S22 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S23 + (A+B); A = S23 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
x = S24 + (A+B); A = S24 = (x << 3) | (x >>> 29); x = L0 + (A+B); y = (A+B) & (w-1); B = L0 = (x << y) | (x >>> (w-y));
x = S25 + (A+B); A = S25 = (x << 3) | (x >>> 29); x = L1 + (A+B); y = (A+B) & (w-1); B = L1 = (x << y) | (x >>> (w-y));
}
}
// RC5 demo worker thread.
class RC5test implements Runnable {
RC5demo Host;
RC5test(RC5demo host)
{
Host = host;
}
public void run()
{
// cyphertext and iv data from the RSA test pseudo-contest "RSA-32/12/8-test"
long ct = 0x496def29b74be041L;
long iv = 0xc41f78c1f839a5d9L;
RC5 rc5 = new RC5_32_12_8();
byte[] key = new byte[rc5.keySize()];
// uncommenting these lines gives the correct key, we'll just start searching close to it
//key[0] = (byte)0x82;
//key[1] = (byte)0xe5;
//key[2] = (byte)0x1b;
key[3] = (byte)0x9f;
key[4] = (byte)0x9c;
key[5] = (byte)0xc7;
key[6] = (byte)0x18;
key[7] = (byte)0xf9;
long keys = 0;
long start = System.currentTimeMillis();
kloop: while (true) {
rc5.setup(key);
long pt = rc5.decrypt(ct) ^ iv;
keys++;
// this represents the string "The unkn"
if (pt == 0x6e6b6e7520656854L) {
// key has been found, but for this demo we'll keep searching
//break;
}
int i = 0;
while (++key[i] == 0) {
i++;
if (i >= 1) {
long now = System.currentTimeMillis();
// terminate the demo after a reasonable amount of time
if (now - start >= 30000) {
break kloop;
}
if (i >= 2) {
Host.updateStats(keys, now - start, false);
}
}
if (i >= key.length) {
break kloop;
}
}
}
long end = System.currentTimeMillis();
Host.updateStats(keys, end - start, true);
}
}
高级设计师
by: 小蜜锋 发表于:2013-08-27 08:38:37 顶(0) | 踩(0) 回复
中间那段。。。
回复评论