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());
  }
 }
}
 
Caesar加密算法 Caesa加密、解密算法,用c/c++语言实现 立即下载

相关推荐

vigenere密码加密解密算法实现软件(Vc++编写)

本软件实现vigenere密码对数据进行加密和解密,并通过Vc++实现

Warshall‘s algorithm 算法的实现及优化

用 Warshall’s 算法计算传递闭包 (1)时间复杂度为:O(nnn) (2)用R的无穷闭包时间复杂度为O(nnn*(n - 1)) 经典实现: 下面展示一些 经典代码片。 void computeAPSP(const int n) { /* calculate shortest paths from every vertex to every vertex */ for (int k = 0; k < n; k++) { for (int i = 0

Partonnn的博客 1121

caser:卷积序列嵌入推荐模型(Caser)的Matlab实现

卡塞尔 从纸上实现了卷积序列嵌入推荐模型(Caser)的Matlab实现: 通过卷积序列嵌入的个性化Top-N顺序推荐,唐佳西和王珂,WSDM &#39;18 注:我强烈建议使用PyTorch版本,因为它具有更好的可读性和可重复性。 要求 Matlab R2015 + 用法 安装MatConvNet()。 更改以使路径指向您的MatConvNet路径。 打开Matlab并运行main_caser.m 构型 数据 数据集组织在2个单独的文件中: train.txt和test.txt 与其他推荐数据格式相同,每个文件都包含三重集合: 用户,项目,等级 唯一的区别是三胞胎是按时间顺序组织的。 由于问题是顺序推荐,因此评级无关紧要,因此我将其转换为1。 模型Args(在main_caser.m中) L :序列长度 T :目标数量 rate_once :每个项目是否只会被每个用户评分一次 e

凯撒密码(Caesar)加密解密算法C/C++实现

任成风2018年5月20日星期日博客首发地址:个人博客网站 http://fairycity.wang,内容以个人博客为主,修正后的博文见个人博客,请点击访问。本文的框架:摘要和关键字: 1、  引言 2、  凯撒密码(Caesar)基本原理 3、  凯撒密码(Caesar)加密算法 4、  凯撒密码(Caesar)解密算法 5、  C/C++程序框架 6、  结束语  摘要:凯撒密码...

qq_36134761的博客 8万+

Caesar(凯撒)密码加密源代码

Caesar密码 凯撒密码 源代码 自己写的,可能有问题,希望发现问题的朋友给我消息 flymybaby@126.com 代码中,只对ASCII码的字母进行加密或者解密,对于其他字符不进行任何处理。 如果你发现更好的实现,请给我留言,谢谢

Caser加密算法的C++实现

密码学实验Caser加密算法,工程文件。

加密技术(学习笔记=)Caesar算法

一个传统的算法(拥有2000年历史)非常古老的算法,就是字母移动位.. 比如: //--直接让字符串+偏移位(甚至可以减去偏移位) char aaa = Convert.ToChar(('中'+2) ); Console.WriteLine(aaa); //---解密的时候反转就可以了 char bbc = Convert.ToC...

weixin_30722589的博客 251

eNSP-Pro配置又丢了?手把手教你用导出功能防患于未然

本文详细介绍了eNSP-Pro配置防丢失的全套方案,包括运行时内存、虚拟存储设备和宿主机文件系统的配置存储机制,以及多维度备份策略和特殊场景下的恢复技巧。通过优化保存流程、自动化定时导出和版本化管理,帮助网络工程师有效防止配置丢失,提升工作效率。

weixin_42665725的博客 239

凯撒密码实现

凯撒密码实现 可以加密中文 在这里插入代码片 # 只能是数字密码,字母密码会出错 import GUIpy.PublicPy as ppy def Encryption(plaintexts, passwds): i = j = 0 ciphers = [] while i < len(plaintexts): plaintext = int.fr...

ShuMihu的博客 549

工控上位机开发学习路线与核心技术解析

工控上位机开发是工业自动化领域的关键技术,通过计算机软件实现对工业设备的监控与控制。其核心在于掌握工业通信协议(如Modbus、OPC UA)、数据处理算法和可视化开发三大能力。上位机系统需要高效解析设备通信协议,处理实时数据,并提供直观的人机交互界面。在智能制造浪潮下,掌握C#语言和工业协议开发能力成为工程师的核心竞争力。典型应用场景包括生产线监控、设备远程运维等。本文基于工业现场实践经验,详解从协议解析到界面优化的全链路开发要点,特别针对Modbus协议调优、WPF性能优化等高频问题提供解决方案。

weixin_30376083的博客 550

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4680

古典密码Caesar的算法实现1

本文阐述Caesar密码3位固定移位规则与数学模型,解析其映射表法加密、数学运算法解密的实现逻辑。

qq_56268978的博客 1399

3.4 ISIS和OSPF之间路由引入

通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。

lwljh134的博客 1802

Caesar加密与解密简单实现

默认密钥K=3, 加密程序 #include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main(){ freopen("Caesar1.txt","r",stdin); freopen("Caesar2.txt"..

HowieMen的博客 3232

展锐 Android 15 无听筒方案删除配置

【代码】展锐 Android 15 无听筒方案删除配置。

m0_60898338的博客 165

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

【字符串】第2关:恺撒加密第3步(按密钥加密)

例如:明文是"ATTACK IN THE MORNING",密钥k为3,则密文是"DWWDFN LQ WKH PRUQLQJ"。

[] 1251

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5923

移位密码

移位密码 当k=3时此时为caesar密码加密算法 #include using namespace std; char s[110]; int main() { int i,j,k; while(~scanf("%s",s)) { scanf("%d",&k); int len=strlen(s); for(i=0;i<le

跟随内心的渴望 2988

ThingsBoard教程(七):模拟设备遥测

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了六篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 上一篇我们讲解了如何使用设备管理来对设备进行增删改查,和设备配置的一些基本概念,本篇文章就带大

知无涯 4577

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

恺撒加密解密——Python

记录一下自己入门密码学接触的第一个密码算法。

lYc 1064

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

凯撒密码

#include #include void caesar(char *s, int n) { while (*s) { *s += n; s++; } } int main(void) { char s[] = "MOMOTARO"; caesar(s, 3); puts(s); return 0; }

laciqs 1774

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python challenge第二关

我使用的版本为Python3.0以上的版本 这关的解题思路就是将所有字母位移两个位置得到新的字母 需注意以下两点: 1.非字母的字符不要对它进行转换 2.y的acsii码为121,位移两位后它会变成a(97)而不是acsii为123的字符 解题过程如下: 我将这个字符转换为序列,方便我进行字符的更改操作 这里的temp<97是为了把非字母的字符筛掉,出题者提供的非字母的字符acsii值均小于97 ord()将字母转换为对应的acsii chr()将acsii的值转换为对.

vickylolo的博客 297

加密算法学习(一、上)——传统加密算法(基础概念、Caesar密码、仿射密码)

本博文借鉴自书本《密码编码学与网络安全——原理与实践(第七版)》,由William Stallings著,王后珍、李莉等译。 一、相关基础概念 1.广泛使用的密码算法与协议可分为以下四个主要领域: 对称加密: 加密任意大小的数据块或数据流的内容,包括消息、文件、加密秘钥和口令。 非对称加密: 加密小数据块,如加密密钥或数字签名中使用的散列函数值。 数据完整...

菜鸟博客 5162

caesar java_java实现caesar加解密算法

凯撒大帝不仅战功卓越,同时对密码算法也是很有研究啊。下面要介绍的加密算法就是由其本人研究并在战争中使用,包括对后人也有着深远的影响。好了,不扯淡了,下面步入正题。凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向后移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字...

weixin_32896083的博客 286
上一篇: Caesar算法的3种实现
下一篇: 皇后问题的Ruby实现
dingx
博客等级 码龄24年 67粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值