📄 crijndael.java
字号:
package com.ss;
public class CRijndael {
public int ECB = 0, CBC = 1, CFB = 2;
private int DEFAULT_BLOCK_SIZE = 16;
int MAX_BLOCK_SIZE = 32, MAX_ROUNDS = 14, MAX_KC = 8, MAX_BC = 8;
private int sm_alog[] = new int[256];
private int sm_log[] = new int[256];
private char sm_S[] = new char[256];
private char sm_Si[] = new char[256];
private int sm_T1[] = new int[256];
private int sm_T2[] = new int[256];
private int sm_T3[] = new int[256];
private int sm_T4[] = new int[256];
private int sm_T5[] = new int[256];
private int sm_T6[] = new int[256];
private int sm_T7[] = new int[256];
private int sm_T8[] = new int[256];
private int sm_U1[] = new int[256];
private int sm_U2[] = new int[256];
private int sm_U3[] = new int[256];
private int sm_U4[] = new int[256];
private char sm_rcon[] = new char[30];
private int sm_shifts[][][] = new int[3][4][2];
// Error Messages
private String[] sm_szErrorMsg1;
private String[] sm_szErrorMsg2;
public char sm_chain0[];
// Key Initialization Flag
boolean m_bKeyInit = false;
// Encryption (m_Ke) round key
int m_Ke[][] = new int[MAX_ROUNDS + 1][MAX_BC];
// Decryption (m_Kd) round key
int m_Kd[][] = new int[MAX_ROUNDS + 1][MAX_BC];
// Key Length
int m_keylength;
// Block Size
int m_blockSize;
// Number of Rounds
int m_iROUNDS;
// Chain Block
char m_chain0[] = new char[MAX_BLOCK_SIZE];
char m_chain[] = new char[MAX_BLOCK_SIZE];
// Auxiliary private use buffers
int tk[] = new int[MAX_KC];
int a[] = new int[MAX_BC];
int t[] = new int[MAX_BC];
// Auxiliary Functions
// Multiply two elements of GF(2^m)
int Mul(int a, int b) {
return (a != 0 && b != 0) ? sm_alog[(sm_log[a & 0xFF] + sm_log[b & 0xFF]) % 255]
: 0;
}
// Convenience method used in generating Transposition Boxes
int Mul4(int a, char b[]) {
if (a == 0)
return 0;
a = sm_log[a & 0xFF];
int a0 = (b[0] != 0) ? sm_alog[(a + sm_log[b[0] & 0xFF]) % 255] & 0xFF
: 0;
int a1 = (b[1] != 0) ? sm_alog[(a + sm_log[b[1] & 0xFF]) % 255] & 0xFF
: 0;
int a2 = (b[2] != 0) ? sm_alog[(a + sm_log[b[2] & 0xFF]) % 255] & 0xFF
: 0;
int a3 = (b[3] != 0) ? sm_alog[(a + sm_log[b[3] & 0xFF]) % 255] & 0xFF
: 0;
return a0 << 24 | a1 << 16 | a2 << 8 | a3;
}
public CRijndael() {
}
// DESTRUCTOR
// Expand a user-supplied key material into a session key.
// key - The 128/192/256-bit user-key to use.
// chain - initial chain block for CBC and CFB modes.
// keylength - 16, 24 or 32 bytes
// blockSize - The block size in bytes of this Rijndael (16, 24 or 32
// bytes).
public void MakeKey(char key[], char chain[], int keylength, int blockSize) {
keylength = DEFAULT_BLOCK_SIZE;
blockSize = DEFAULT_BLOCK_SIZE;
}
// Auxiliary Function
private void Xor(char buff, char chain[])
{
if(false==m_bKeyInit);
for(int i=0; i<m_blockSize; i++){
buff ^= chain[i];
}
//*(buff++) ^= *(chain++);
}
// Convenience method to encrypt exactly one block of plaintext,
// assuming
// Rijndael's default block size (128-bit).
// in - The plaintext
// result - The ciphertext generated from a plaintext using the key
void DefEncryptBlock(char in[], char result[]) {};
// Convenience method to decrypt exactly one block of plaintext,
// assuming
// Rijndael's default block size (128-bit).
// in - The ciphertext.
// result - The plaintext generated from a ciphertext using the session
// key.
void DefDecryptBlock(char in[], char result[]) {
};
// Encrypt exactly one block of plaintext.
// in - The plaintext.
// result - The ciphertext generated from a plaintext using the key.
public void EncryptBlock(char in[], char result[]) {
};
// Decrypt exactly one block of ciphertext.
// in - The ciphertext.
// result - The plaintext generated from a ciphertext using the session
// key.
void DecryptBlock(char in[], char result[]) {
};
void Encrypt(char in[], char result[], long n, int iMode) {
iMode = ECB;
}
void Decrypt(char in[], char result[], long n, int iMode) {
iMode = ECB;
}
// Get Key Length
int GetKeyLength() {
if (false == m_bKeyInit);
return m_keylength;
}
// Block Size
int GetBlockSize() {
if (false == m_bKeyInit);
return m_blockSize;
}
// Number of Rounds
int GetRounds() {
if (false == m_bKeyInit);
return m_iROUNDS;
}
void ResetChain() {
System.arraycopy(m_chain, CBC, m_chain0, m_blockSize, CBC);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -