📜  波利比乌斯方密码

📅  最后修改于: 2022-05-13 01:57:08.781000             🧑  作者: Mango

波利比乌斯方密码

Polybius Square 是一张允许某人将字母转换为数字的表格。为了使加密更难一点,这个表可以随机化并与接收者共享。为了将字母表中的 26 个字母放入表格创建的 25 个单元格中,字母“i”和“j”通常组合成一个单元格。原来没有这个问题,因为古希腊字母表有 24 个字母。

如果一种语言包含大量字母,则可以使用更大尺寸的表格。

例子:

Input :  bus
Output : 124543

Input :  geeksforgeeks 
Output : 22151525432134422215152543 

C++
// CPP Program to implement polybius cipher
#include 
#include 
using namespace std;
  
// function to display polybius cipher text
void polybiusCipher(string s) {
  int row, col;
  
  // convert each character to its encrypted code
  for (int i = 0; s[i]; i++) {
  
    // finding row of the table
    row = ceil((s[i] - 'a') / 5) + 1;
  
    // finding column of the table
    col = ((s[i] - 'a') % 5) + 1;
  
    // if character is 'k'
    if (s[i] == 'k') {
      row = row - 1;
      col = 5 - col + 1;
    }
  
    // if character is greater than 'j'
    else if (s[i] >= 'j') {
      if (col == 1) {
        col = 6;
        row = row - 1;
      }
      col = col - 1;
    }
    cout << row << col;
  }
  
  cout << endl;
}
  
// Driver's Code
int main() {
  string s = "geeksforgeeks";
  polybiusCipher(s);
  return 0;
}


Java
// Java Program to implement polybius cipher
  
class GFG
{
    // Function to display polybius
    // cipher text
    static void polybiusCipher(String s) 
    {
        int row, col;
          
        // convert each character 
        // to its encrypted code
        for (int i = 0;i < s.length(); i++) 
        {
          
            // finding row of the table
            row = (int)Math.ceil((s.charAt(i) - 'a') / 5) + 1;
          
            // finding column of the table
            col = ((s.charAt(i) - 'a') % 5) + 1;
          
            // if character is 'k'
            if (s.charAt(i) == 'k') 
            {
                row = row - 1;
                col = 5 - col + 1;
            }
          
            // if character is greater than 'j'
            else if (s.charAt(i) >= 'j')
            {
                if (col == 1) 
                {
                    col = 6;
                    row = row - 1;
                }
                col = col - 1;
            }
            System.out.print(row +""+ col);
        }
          
        System.out.println();
    }
      
    // Driver code
    public static void main (String[] args)
    {
        String s = "geeksforgeeks";
        polybiusCipher(s);
    }
}
  
// This code is contributed by Anant Agarwal.


Python
# Python Program to implement polybius cipher
  
# function to display polybius cipher text
def polybiusCipher(s):
  
        # convert each character to its encrypted code
        for char in s:
              
                # finding row of the table
                row = int((ord(char) - ord('a')) / 5) + 1
          
                # finding column of the table 
                col = ((ord(char) - ord('a')) % 5) + 1
  
                # if character is 'k'
                if char == 'k':
                        row = row - 1
                        col = 5 - col + 1
                          
                # if character is greater than 'j'
                elif ord(char) >= ord('j'):
                        if col == 1 :
                            col = 6
                            row = row - 1
                              
                        col = col - 1
                          
                print(row, col, end ='', sep ='')
  
# Driver's Code
if __name__ == "__main__":
  
        s = "geeksforgeeks"
  
        # print the cipher of "geeksforgeeks"
        polybiusCipher(s)


C#
// C# Program to implement
// polybius cipher
using System;
  
class GFG
{
    // Function to display 
    // polybius cipher text
    static void polybiusCipher(string s) 
    {
        int row, col;
          
        // convert each character 
        // to its encrypted code
        for (int i = 0;
                 i < s.Length; i++) 
        {
            // finding row of the table
            row = (int)Math.Floor((s[i] - 
                         'a') / 5.0) + 1;
              
            // finding column
            // of the table
            col = ((s[i] - 'a') % 5) + 1;
          
            // if character is 'k'
            if (s[i] == 'k') 
            {
                row = row - 1;
                col = 5 - col + 1;
            }
          
            // if character is 
            // greater than 'j'
            else if (s[i] >= 'j')
            {
                if (col == 1) 
                {
                    col = 6;
                    row = row - 1;
                }
                col = col - 1;
            }
            Console.Write(row + 
                          "" + col);
        }
        Console.WriteLine();
    }
      
    // Driver code
    static void Main ()
    {
        string s = "geeksforgeeks";
        polybiusCipher(s);
    }
} 
  
// This code is contributed by 
// Manish Shaw(manishshaw1)


PHP
= 'j')
    {
        if ($col == 1) 
        {
            $col = 6;
            $row = $row - 1;
        }
        $col = $col - 1;
    }
    echo ($row.$col);
} 
echo ("\n");
}
  
// Driver Code
$s = "geeksforgeeks";
polybiusCipher($s);
  
// This code is contributed by 
// Manish Shaw(manishshaw1)
?>


输出:

22151525432134422215152543