Code C#: Mã hóa cổ điển Affine (Affine Cipher)

Người đăng: culaoxanh88 on Thứ Năm, 20 tháng 2, 2014


///Hàm mã hóa Affine (Affine Encryption)
/// e(x) = (ax + b)(mod m). Note: a & m là số nguyên tố cùng nhau.

public static string AffineEncrypt(string plainText, int a, int b){
string cipherText = "";

char[] chars = plainText.ToUpper().ToCharArray();

foreach (char c in chars){
      int x = Convert.ToInt32(c - 65);
      cipherText += Convert.ToChar((( a * x + b ) % 26) + 65);
}

return cipherText;
}

/// Hàm giải mã Affine (Affine Decryption)
/// d(x) = aInverse * (e(x) − b)(mod m).

public static string AffineDecrypt(string cipherText, int a, int b){
string plainText = "";

int aInverse = MultiplicativeInverse(a); 

char[] chars = cipherText.ToUpper().ToCharArray();

foreach (char c in chars){
    int x = Convert.ToInt32(c - 65);
    if (x - b < 0) x = Convert.ToInt32(x) + 26;
    plainText += Convert.ToChar(((aInverse * (x - b)) % 26) + 65);
} 
    return plainText;
}

public static int MultiplicativeInverse(int a){
for (int x = 1; x < 27; x++){
    if ((a * x) % 26 == 1)
    return x;
}
throw new Exception("No multiplicative inverse found!");

}

Tag: C, C++, C#, mã hóa cổ điển, Affine, Affine Cipher, an toàn, bảo mật, Security

{ 0 nhận xét... read them below or add one }

Đăng nhận xét