热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java实现凯撒密码的简易加解密程序

本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。
Java实现凯撒密码的简易加解密程序

1. 凯撒密码简介

凯撒密码源于古罗马时期的军事通信,由当时的军事统帅朱利叶斯·凯撒发明,用于保护信息不被敌方截获。该密码的工作原理是通过将原文中的每个字母按固定的位数向前或向后移动,形成新的字母,以此达到加密的效果。例如,若设定偏移量为3,则字母A会变成D,B变成E,以此类推。

2. 程序需求分析

为了实现凯撒密码的加解密功能,需要用户输入待加密的文本和一个作为密钥的数字。程序根据这个数字对文本中的每个字符进行相应的位移操作,完成加密过程。解密则是加密的逆过程,使用相同的密钥对加密后的文本进行反向位移,恢复原始文本。

3. 技术原理

  • 在Java中,可以通过ASCII码对字符进行数学运算来实现字符的位移。对于大写字母和小写字母,它们的ASCII码范围分别是65-90和97-122。当字符经过位移后超出了这些范围时,需要通过取模运算来调整回正确的范围内。
  • 具体来说,如果字符是小写字母且位移后超过了'z',则应减去26使其回到小写字母的起始位置;如果是大写字母且位移后超过了'Z',同样减去26。相反地,如果位移导致字符低于'a'或'A',则应加上26。

4. 示例代码

import java.util.Scanner;

public class CaesarCipher {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择操作:[E] 加密 [D] 解密");
String choice = scanner.nextLine();
if (choice.equalsIgnoreCase("E")) {
encrypt(scanner);
} else if (choice.equalsIgnoreCase("D")) {
decrypt(scanner);
}
}

private static void encrypt(Scanner scanner) {
System.out.println("请输入明文:");
String plainText = scanner.nextLine();
System.out.println("请输入密钥:");
int key = scanner.nextInt();
String encryptedText = shiftText(plainText, key);
System.out.println("加密后的文本为:" + encryptedText);
}

private static void decrypt(Scanner scanner) {
System.out.println("请输入密文:");
String cipherText = scanner.nextLine();
System.out.println("请输入密钥:");
int key = scanner.nextInt();
String decryptedText = shiftText(cipherText, -key);
System.out.println("解密后的文本为:" + decryptedText);
}

private static String shiftText(String text, int key) {
StringBuilder result = new StringBuilder();
for (char character : text.toCharArray()) {
if (Character.isLetter(character)) {
char base = Character.isUpperCase(character) ? 'A' : 'a';
char shiftedChar = (char) (((character + key - base) % 26) + base);
result.append(shiftedChar);
} else {
result.append(character);
}
}
return result.toString();
}
}

5. 运行结果

以下是程序运行的结果示例,展示了如何对文本进行加密和解密:

加密示例:
加密示例

解密示例:
解密示例


推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
author-avatar
痴情小猪噜噜1907181048
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有