1 49 package com.lowagie.text.pdf.crypto; 50 51 public class ARCFOUREncryption { 52 private byte state[] = new byte[256]; 53 private int x; 54 private int y; 55 56 57 public ARCFOUREncryption() { 58 } 59 60 public void prepareARCFOURKey(byte key[]) { 61 prepareARCFOURKey(key, 0, key.length); 62 } 63 64 public void prepareARCFOURKey(byte key[], int off, int len) { 65 int index1 = 0; 66 int index2 = 0; 67 for (int k = 0; k < 256; ++k) 68 state[k] = (byte)k; 69 x = 0; 70 y = 0; 71 byte tmp; 72 for (int k = 0; k < 256; ++k) { 73 index2 = (key[index1 + off] + state[k] + index2) & 255; 74 tmp = state[k]; 75 state[k] = state[index2]; 76 state[index2] = tmp; 77 index1 = (index1 + 1) % len; 78 } 79 } 80 81 public void encryptARCFOUR(byte dataIn[], int off, int len, byte dataOut[], int offOut) { 82 int length = len + off; 83 byte tmp; 84 for (int k = off; k < length; ++k) { 85 x = (x + 1) & 255; 86 y = (state[x] + y) & 255; 87 tmp = state[x]; 88 state[x] = state[y]; 89 state[y] = tmp; 90 dataOut[k - off + offOut] = (byte)(dataIn[k] ^ state[(state[x] + state[y]) & 255]); 91 } 92 } 93 94 public void encryptARCFOUR(byte data[], int off, int len) { 95 encryptARCFOUR(data, off, len, data, off); 96 } 97 98 public void encryptARCFOUR(byte dataIn[], byte dataOut[]) { 99 encryptARCFOUR(dataIn, 0, dataIn.length, dataOut, 0); 100 } 101 102 public void encryptARCFOUR(byte data[]) { 103 encryptARCFOUR(data, 0, data.length, data, 0); 104 } 105 } | Popular Tags |