encryption - BitShifting with BigIntegers in Java -


i implementing des encryption in java use of bigintegers.

i left shifting binary keys java bigintegers doing biginteger.leftshift(int n) method. key of n (kn) dependent on result of shift of kn-1. problem getting printing out results after each key generated , shifting not expected out put. key split in 2 cn , dn (left , right respectively).

i attempting this: "to left shift, move each bit 1 place left, except first bit, cycled end of block. "

it seems tack on o's on end depending on shift. not sure how go correcting this.

results:

c0: 11110101010100110011000011110

d0: 11110001111001100110101010100

c1: 111101010101001100110000111100

d1: 111100011110011001101010101000

c2: 11110101010100110011000011110000

d2: 11110001111001100110101010100000

c3: 1111010101010011001100001111000000

d3: 1111000111100110011010101010000000

c4: 111101010101001100110000111100000000

d4: 111100011110011001101010101000000000

c5: 11110101010100110011000011110000000000

d5: 11110001111001100110101010100000000000

c6: 1111010101010011001100001111000000000000

d6: 1111000111100110011010101010000000000000

c7: 111101010101001100110000111100000000000000

d7: 111100011110011001101010101000000000000000

c8: 1111010101010011001100001111000000000000000

d8: 1111000111100110011010101010000000000000000

c9: 111101010101001100110000111100000000000000000

d9: 111100011110011001101010101000000000000000000

c10: 11110101010100110011000011110000000000000000000

d10: 11110001111001100110101010100000000000000000000

c11: 1111010101010011001100001111000000000000000000000

d11: 1111000111100110011010101010000000000000000000000

c12: 111101010101001100110000111100000000000000000000000

d12: 111100011110011001101010101000000000000000000000000

c13: 11110101010100110011000011110000000000000000000000000

d13: 11110001111001100110101010100000000000000000000000000

c14: 1111010101010011001100001111000000000000000000000000000

d14: 1111000111100110011010101010000000000000000000000000000

c15: 11110101010100110011000011110000000000000000000000000000

d15: 11110001111001100110101010100000000000000000000000000000

biginteger implements infinite-precision integers, shifting left keep adding zeros left. need rotate:

private static biginteger rotateleft(biginteger bi) {     biginteger ret = bi.shiftleft(1);     if (ret.testbit(32)) {         ret = ret.clearbit(32).setbit(0);     }     return ret; } 

that's going rather inefficient 32-bit numbers, might use primitives rotate des' 28-bit halves. i'm not familiar des algorithm, i'll assume need biginteger else.

private static biginteger rotateleftprimitive(biginteger bi) {     int value = bi.intvalue();     return biginteger.valueof(((value << 1) & 0xffffffe) | ((value >>> 27) & 1)); } 

Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -