/** * @brief Bu fonksiyon; istenilen bir DES (Data Encryption Standart) modunda, kendisine verilen * veri dizisini sifreler ve sifrelenmis dizi olarak geri dondurur. * @param plainData * @param cipherMode * @retval cipherData */ public UInt64[] Encrypt_Data(UInt64[] plainData, DES_Mode_Enum cipherMode) { UInt64[] cipherData = new UInt64[plainData.Length]; UInt64 chainBuffer = 0x0000000000000000; UInt16 i = 0; switch (cipherMode) { /* DES - CBC (Cipher Block Chaining) sifreleme rutini */ case DES_Mode_Enum.CBC: Get_Subkeys(); /* acik verinin ilk elemani IV (Initialization Vector) ile XOR'landiktan sonra sifreleniyor */ chainBuffer = (IV ^ plainData[0]); cipherData[0] = Encode_BlockData(chainBuffer); /* IV ile ilk veri elemaninin sifrelenmesinin ardindan her bir sifrelenmis veri bir sonraki * verinin sifrelenmesinde rol oynuyor. Boylece sifre blok zinciri olusturulmus oluyor */ for (i = 1; i < plainData.Length; i++) { chainBuffer = (cipherData[i - 1] ^ plainData[i]); cipherData[i] = Encode_BlockData(chainBuffer); } break; /* DES - ECB (Electronic Code Book) sifreleme rutini */ case DES_Mode_Enum.ECB: Get_Subkeys(); /* acik veri tek tek sifrelenerek sifrelenmis veri dizisine aktariliyor */ for (i = 0; i < plainData.Length; i++) { cipherData[i] = Encode_BlockData(plainData[i]); } break; default: // bu satir bilerek bos birakildi break; } return(cipherData); }
/** * @brief Bu fonksiyon; istenilen bir DES (Data Encryption Standart) modunda, kendisine verilen * sifrelenmis veriyi cozerek geri dondurur. * @param cipherData * @param cipherMode * @retval plainData */ public UInt64[] Decrypt_Data(UInt64[] cipherData, DES_Mode_Enum cipherMode) { UInt64[] plainData = new UInt64[cipherData.Length]; UInt64 chainBuffer = 0x0000000000000000; UInt16 i = 0; switch (cipherMode) { /* DES - CBC (Cipher Block Chaining) sifre cozme rutini */ case DES_Mode_Enum.CBC: Get_Subkeys(); /* sifreli verinin ilk elemaninin sifresi cozulup IV (Initialization Vector) ile XOR'laniyor */ chainBuffer = Decode_BlockData(cipherData[0]); plainData[0] = (chainBuffer ^ IV); /* her bir datanin sirayla sifresi cozulup bir onceki veri ile XOR islemine tabi tutuluyor */ for (i = 1; i < cipherData.Length; i++) { chainBuffer = Decode_BlockData(cipherData[i]); plainData[i] = (chainBuffer ^ cipherData[i - 1]); } break; /* DES - ECB (Electronic Code Book) sifre cozme rutini */ case DES_Mode_Enum.ECB: Get_Subkeys(); /* sifrelenmis veri tek tek cozulerek acik veri dizisine aktariliyor */ for (i = 0; i < cipherData.Length; i++) { plainData[i] = Decode_BlockData(cipherData[i]); } break; default: break; } return(plainData); }