// inData, outData ¶¼Îª 8 Bytes£¬·ñÔò³ö´í void desData(TDesMode desMode, byte[] inData, byte[] outData) { int i, j; byte[] temp = new byte[4]; byte[] buf = new byte[4]; for (i = 0; i < 8; i++) outData[i] = inData[i]; initPermutation(outData); if (desMode == TDesMode.dmEncry) { for (i = 0; i < 16; i++) { for (j = 0; j < 4; j++) temp[j] = outData[j]; //temp = Ln for (j = 0; j < 4; j++) outData[j] = outData[j + 4]; //Ln+1 = Rn encry(outData, SubKey[i], buf); //Rn ==Kn==> buf for (j = 0; j < 4; j++) outData[j + 4] = (byte)(temp[j] ^ buf[j]); //Rn+1 = Ln^buf }; for (j = 0; j < 4; j++) temp[j] = outData[j + 4]; for (j = 0; j < 4; j++) outData[j + 4] = outData[j]; for (j = 0; j < 4; j++) outData[j] = temp[j]; } else if (desMode == TDesMode.dmDecry) { for (i = 15; i >= 0; i--) { for (j = 0; j < 4; j++) temp[j] = outData[j]; for (j = 0; j < 4; j++) outData[j] = outData[j + 4]; encry(outData, SubKey[i], buf); for (j = 0; j < 4; j++) outData[j + 4] = (byte)(temp[j] ^ buf[j]); }; for (j = 0; j < 4; j++) temp[j] = outData[j + 4]; for (j = 0; j < 4; j++) outData[j + 4] = outData[j]; for (j = 0; j < 4; j++) outData[j] = temp[j]; }; conversePermutation(outData); }
private void desData(TDesMode desMode, byte[] inData, ref byte[] outData) { int i, j; byte[] temp = new byte[4]; byte[] buf = new byte[4]; for (i = 0; i < 8; i++) { outData[i] = inData[i]; } this.initPermutation(ref outData); if (desMode == TDesMode.dmEncry) { for (i = 0; i < 16; i++) { for (j = 0; j < 4; j++) { temp[j] = outData[j]; } for (j = 0; j < 4; j++) { outData[j] = outData[j + 4]; } this.encry(outData, subKey[i], ref buf); for (j = 0; j < 4; j++) { outData[j + 4] = (byte)(temp[j] ^ buf[j]); } } for (j = 0; j < 4; j++) { temp[j] = outData[j + 4]; } for (j = 0; j < 4; j++) { outData[j + 4] = outData[j]; } for (j = 0; j < 4; j++) { outData[j] = temp[j]; } } else if (desMode == TDesMode.dmDecry) { for (i = 15; i >= 0; i--) { for (j = 0; j < 4; j++) { temp[j] = outData[j]; } for (j = 0; j < 4; j++) { outData[j] = outData[j + 4]; } this.encry(outData, subKey[i], ref buf); for (j = 0; j < 4; j++) { outData[j + 4] = (byte)(temp[j] ^ buf[j]); } } for (j = 0; j < 4; j++) { temp[j] = outData[j + 4]; } for (j = 0; j < 4; j++) { outData[j + 4] = outData[j]; } for (j = 0; j < 4; j++) { outData[j] = temp[j]; } } this.conversePermutation(ref outData); }
/// <summary> /// inData, outData 都为8Bytes,否则出错 /// </summary> /// <param name="desMode"></param> /// <param name="inData"></param> /// <param name="outData"></param> static void desData(TDesMode desMode, byte[] inData, ref byte[] outData) { byte[] temp = new byte[4]; byte[] buf = new byte[4]; for (int i = 0; i < 8; i++) { outData[i] = inData[i]; } initPermutation(ref outData); if (desMode == TDesMode.dmEncry) { for (int i = 0; i < 16; i++) { for (int j = 0; j < 4; j++) { temp[j] = outData[j]; //temp = Ln } for (int j = 0; j < 4; j++) { outData[j] = outData[j + 4]; //Ln+1 = Rn } encry(outData, subKey[i], ref buf); //Rn ==Kn==> buf //subKey[i] for (int j = 0; j < 4; j++) { outData[j + 4] = (byte)(temp[j] ^ buf[j]); //Rn+1 = Ln^buf } } for (int j = 0; j < 4; j++) { temp[j] = outData[j + 4]; } for (int j = 0; j < 4; j++) { outData[j + 4] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = temp[j]; } } else if (desMode == TDesMode.dmDecry) { for (int i = 15; i >= 0; i--) { for (int j = 0; j < 4; j++) { temp[j] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = outData[j + 4]; } encry(outData, subKey[i], ref buf); for (int j = 0; j < 4; j++) { outData[j + 4] = (byte)(temp[j] ^ buf[j]); } } for (int j = 0; j < 4; j++) { temp[j] = outData[j + 4]; } for (int j = 0; j < 4; j++) { outData[j + 4] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = temp[j]; } } conversePermutation(ref outData); }
private void desData(TDesMode desMode, byte[] inData, byte[] outData) { byte[] temp = new byte[4]; byte[] buf = new byte[4]; for (int i = 0; i < 8; i++) { outData[i] = inData[i]; } this.initPermutation(outData); bool flag = desMode == TDesMode.dmEncry; if (flag) { for (int i = 0; i < 16; i++) { for (int j = 0; j < 4; j++) { temp[j] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = outData[j + 4]; } this.encry(outData, this.SubKey[i], buf); for (int j = 0; j < 4; j++) { outData[j + 4] = (byte)(temp[j] ^ buf[j]); } } for (int j = 0; j < 4; j++) { temp[j] = outData[j + 4]; } for (int j = 0; j < 4; j++) { outData[j + 4] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = temp[j]; } } else { bool flag2 = desMode == TDesMode.dmDecry; if (flag2) { for (int i = 15; i >= 0; i--) { for (int j = 0; j < 4; j++) { temp[j] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = outData[j + 4]; } this.encry(outData, this.SubKey[i], buf); for (int j = 0; j < 4; j++) { outData[j + 4] = (byte)(temp[j] ^ buf[j]); } } for (int j = 0; j < 4; j++) { temp[j] = outData[j + 4]; } for (int j = 0; j < 4; j++) { outData[j + 4] = outData[j]; } for (int j = 0; j < 4; j++) { outData[j] = temp[j]; } } } this.conversePermutation(outData); }