波利比乌斯方密码
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