`
DigitalSonic
  • 浏览: 215106 次
社区版块
存档分类
最新评论

Caesar算法的3种实现

阅读更多

1、Ruby实现:caesar.rb

def encode(plaintext, offset)
 ciphertext = plaintext.dup
 for i in 0..(plaintext.length-1)
  if plaintext[i]>=?a && plaintext[i]<=?z
   ciphertext[i] = ?a + ((plaintext[i] - ?a + offset) % 26)
  elsif plaintext[i]>=?A && plaintext[i]<=?Z
   ciphertext[i] = ?A + ((plaintext[i] - ?A + offset) % 26)
  elsif plaintext[i]>=?0 && plaintext[i]<=?9
   ciphertext[i] = ?0 + ((plaintext[i] - ?0 + offset) % 10)
  end
 end
 print "Ciphertext: ", ciphertext
end

def decode(ciphertext, offset)
 plaintext = ciphertext.dup
 for i in 0..(ciphertext.length-1)
  if ciphertext[i]>=?a && ciphertext[i]<=?z
   plaintext[i] = ?a + ((ciphertext[i] - ?a - offset) % 26)
  elsif ciphertext[i]>=?A && ciphertext[i]<=?Z
   plaintext[i] = ?A + ((ciphertext[i] - ?A - offset) % 26)
  elsif ciphertext[i]>=?0 && ciphertext[i]<=?9
   plaintext[i] = ?0 + ((ciphertext[i] - ?0 - offset) % 10)
  end
 end
 print "Plaintext: ", plaintext
end

print "What do you want to do? (e)ncode or (d)ecode a text?[e/d]"
choose = gets
print "Please input offset value: "
offset = gets
offset = offset[0] - ?0
if choose == "e\n" || choose == "E\n"
 print "Please input the plaintext:"
 text = gets
 encode(text,offset)
else
 print "Please input the ciphertext:"
 text = gets
 decode(text,offset)
end
print "Press ENTER to return."
$stdin.gets
 


2、Groovy实现:caesar.groovy

import java.io.*;


def encode(plaintext, offset) {
 ciphertext = "";
 for (i in plaintext)
  switch(i) {
   case 'a'..'z':
    ciphertext += (char)((char)'a' + (((char)i - (char)'a' + offset) % 26));
    break;
   case 'A'..'Z':
    ciphertext += (char)((char)'A' + (((char)i - (char)'A' + offset) % 26));
    break;
   case '0'..'9':
    ciphertext += Integer.valueOf('0') + (((char)i - (char)'0' + offset) % 10);
  }
 println("Ciphertext: " + ciphertext);
}

def decode(ciphertext, offset) {
 plaintext = "";
 for (i in ciphertext)
  switch(i) {
   case 'a'..'z':
    plaintext += (char)((char)'a' + (((char)i - (char)'a' - offset) % 26));
    break;
   case 'A'..'Z':
    plaintext += (char)((char)'A' + (((char)i - (char)'A' - offset) % 26));
    break;
   case '0'..'9':
    plaintext += Integer.valueOf('0') + (((char)i - (char)'0' - offset) % 10);
  }
 println("Plaintext: " + plaintext);
}

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
print "What to you want to do? (E)ncode or Decode?[e/d]";
action = br.readLine();
print "Please input offset value: ";
int offset = Integer.valueOf(br.readLine());
print "Please input the "
if (action=='d' || action=='D') {
  print "ciphertext: ";
  decode(br.readLine(),offset);
} else {
 print "plaintext: ";
 encode(br.readLine(),offset);
}
println "Press ENTER..."
System.in.read();
 

 

3、Java实现:Caesar.java

import java.io.*;

public class Caesar {
 public static void encode(String PlainText, int Offset) {
  String CipherText = "";
  for (int i = 0; i < PlainText.length(); i++) {
   if (PlainText.charAt(i) >= 'a' && PlainText.charAt(i) <= 'z')
    CipherText += (char)('a' + ((PlainText.charAt(i) - 'a' + Offset) % 26));
   else if (PlainText.charAt(i) >= 'A' && PlainText.charAt(i) <= 'Z')
    CipherText += (char)('A' + ((PlainText.charAt(i) - 'A' + Offset) % 26));
   else if (PlainText.charAt(i) >= '0' && PlainText.charAt(i) <= '9')
    CipherText += (char)('0' + ((PlainText.charAt(i) - '0' + Offset) % 10));
  }
  System.out.println("Ciphertext: " + CipherText);
 }
 
 public static void decode(String CipherText, int Offset) {
  String PlainText = "";
  for (int i = 0; i < CipherText.length(); i++) {
   if (CipherText.charAt(i) >= 'a' && CipherText.charAt(i) <= 'z')
    PlainText += (char)('a' + ((CipherText.charAt(i) - 'a' - Offset) % 26));
   else if (CipherText.charAt(i) >= 'A' && CipherText.charAt(i) <= 'Z')
    PlainText += (char)('A' + ((CipherText.charAt(i) - 'A' - Offset) % 26));
   else if (CipherText.charAt(i) >= '0' && CipherText.charAt(i) <= '9')
    PlainText += (char)('0' + ((CipherText.charAt(i) - '0' - Offset) % 10));
  }
  System.out.println("PlainText: " + PlainText);
 }
 
 public static void main(String[] args) {
  try {
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   System.out.print ("What to you want to do? (E)ncode or Decode?[e/d]");
   String action = br.readLine();
   System.out.print ("Please input offset value: ");
   int offset = Integer.valueOf(br.readLine());
   System.out.print ("Please input the ");
   if (action.equalsIgnoreCase("d")) {
     System.out.print("ciphertext: ");
     decode(br.readLine(),offset);
   } else {
    System.out.print("plaintext: ");
    encode(br.readLine(),offset);
   }
   System.out.println("Press ENTER...");
   System.in.read();
  } catch(IOException ex) {
   System.out.println(ex.getMessage());
  }
 }
}
 
分享到:
评论

相关推荐

    JAVA实现的Caesar加密算法

    在JAVA中实现Caesar加密算法,可以深入了解字符编码、字符串处理和循环结构等编程基础知识。 首先,我们需要了解Java的基础语法,包括类、对象和方法的定义。在Java中,我们可以创建一个名为`CaesarCipher`的类,...

    Caesar加密算法

    Caesa加密、解密算法,用c/c++语言实现

    php-使用php开发的cipher加密算法之CaesarCipher-加密算法实现.zip

    php php_使用php开发的cipher加密算法之CaesarCipher_加密算法实现

    简单caesar密码加密解密

    在Caesar密码中,假设我们设定的偏移量是3,那么明文中的"A"将会被替换为"D","B"变为"E",以此类推,直到到达字母表的末尾,Z将变为"C"。当字母移动到字母表的末尾时,它会再次从头开始。这种加密方式对大写字母和...

    四种古典密码算法实现

    在提供的源代码中,每种密码的加密和解密过程都应有详细的注释,便于理解算法工作原理。这些源代码可以作为学习密码学和C++编程的实践案例,帮助读者深入理解加密解密过程,并为开发自己的密码系统打下基础。 通过...

    凯撒密码(Caesar)的原理和算法实现(C语言)

    凯撒密码,又称凯撒加密法,是一种历史悠久的简单加密技术。它的基本原理是通过将原文中的每个字母按照字母表顺序向右(或向左)平移固定数量的位置来...在实际应用中,我们应使用更为安全的加密算法,如AES、RSA等。

    Caesar,playfair,Des,AES,RSA等密码算法的实现

    最后,实验七是关于哈希算法MD5,这是一种广泛用于数据完整性和消息认证的算法,产生128位的固定长度摘要,但因存在碰撞问题,现在更多用于历史比较和理解。 通过这些实验,学生不仅能够学习到密码学的基本概念,还...

    C#caesar密码程序

    3. **穷举攻击**:在C#程序中实现Caesar密码的穷举攻击,通常会遍历所有可能的位移值(通常是26个字母),尝试解密,直到找到合适的解密结果。这需要对C#的循环控制结构如`for`或`while`的熟练运用。 4. **图形用户...

    凯撒密码算法的实现

    例如,如果偏移量是3,那么字母A将被替换为D,B变为E,以此类推。这种加密方式是可逆的,解密时只需用同样的偏移量在密文的字母表上逆向移动即可还原明文。 实现凯撒密码通常分为两个步骤:加密和解密。 1. **加密...

    MATLAB 实现Caesar密码加密与解密

    Caesar密码,也被称为凯撒密码,是一种古老且简单的替换式加密技术,它通过将明文中的每个字母向右(或向左)平移固定数量的位置来实现加密。在这个项目中,我们使用了MATLAB这一强大的数值计算和编程环境来实现...

    Caesar密码_实验报告1

    3. **Caesar密码实现**:在实验中,学生需要利用Microsoft的Visual Studio编写一个基于MFC的对话框工程。主要步骤包括创建明文、密钥和密文输入输出框,以及加密/解密按钮。编程时要注意ASCII码值的计算,例如'a'到'...

    Caesar(凯撒)加密解密算法

    3. `CaesarDlg.cpp` 和 `CaesarDlg.h`:对话框类的实现和声明,包括加密解密功能。 4. `mainfest.res`:应用程序清单资源。 5. `Caesar.rc`:资源脚本文件,定义对话框布局和其他资源。 6. `Makefile` 或 `vcxproj` ...

    JAVA实现caesar凯撒加密算法

    凯撒加密(Caesar Cipher)是一种古老且基础的密码学技术,它的核心思想是将明文中的每个字符按照字母表顺序向右或向左平移固定数量的位置,从而达到加密的目的。这种加密方法由古罗马的凯撒大帝使用,故得名凯撒...

    Caesar密码加密解密

    Java作为一种广泛使用的编程语言,其强大的字符串处理功能使得实现Caesar密码的加密解密算法变得相对简单。在Java程序中,可以使用`Character`类和`StringBuilder`类来实现这些操作。首先,读取用户输入的明文和偏移...

    Caesar加密及解密的java实现

    在Java中实现Caesar加密和解密,我们可以创建一个简单的控制台程序来完成这个任务。** 首先,我们需要理解加密的过程。假设我们有一个固定的偏移量`key`,那么对于明文中的每个字符`c`(假设是ASCII编码),加密...

    C语言实现凯撒算法编解码(加密和解密).zip

    在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最...本资源使用C语言实现凯撒算法加密和解密,可以实现数据的加密和文件的加密,不借助任何的第三方工具,便于移植。

    playfair算法 C实现

    C语言实现Playfair加密算法的过程主要包括以下步骤: 1. **矩阵生成**:首先,根据给定的关键(key)创建5x5的矩阵。关键是一个由5对不重复字母组成的单词,每对字母之间用空格分隔。将关键的字母填充到矩阵中,...

    信息安全 所有算法java实现

    3. **Caesar Cipher**:凯撒密码是一种古老的替换加密方式,通过将明文中的每个字符按照固定位数向右(或左)移动来实现加密。虽然其安全性极低,但它是密码学的起点,有助于理解基础的加密概念。 4. **Diffie-...

    古典加密算法Caesar 包括实习报告

    在Java平台上实现凯撒密码的加密和解密,可以深入理解字符处理和加密原理,同时提供了一个学习基础加密算法和软件开发实践的良好案例。 首先,我们需要理解Java平台开发的基本知识。Java是一种广泛使用的面向对象的...

    凯撒加密算法的C语言实现.zip

    在C语言中实现这种算法,我们可以分为以下几个关键步骤来理解和讨论。 首先,我们需要理解C语言的基本语法和数据类型。C语言是一种静态类型的编译型语言,它提供了丰富的数据类型,如字符(char)、整型(int)和字符串...

Global site tag (gtag.js) - Google Analytics