如何计算维吉尼亚密码?Java实现维吉尼亚密码的加密解密算法

news/2024/5/15 1:20:01/文章来源:https://blog.csdn.net/qq_46617150/article/details/127263853

文章目录

    • 如何计算维吉尼亚密码?
    • Java实现加密算法
    • Java实现解密算法
    • 参考博客

如何计算维吉尼亚密码?

计算维吉尼亚密码有2种方式,一种是根据密码表查找,另一种是手动计算方法。
1.密码表查找法
第一行是密钥,第一列是明文,某明文对应密钥加密产生的密文即为该行该列处的字母。
比如:明文是I LOVE YOU,密钥是KEY
那么对应的查询关系就是
在这里插入图片描述

在这里插入图片描述
2.手动计算方法
用数字0-25代替字母A-Z,需要特别注意的是第一个字母是从0开始编号的。要是从1开始计算,得到的结果肯定是错误的。还有就是·编号相加之后数值大于等于26,我们都要将这个数据对26做模运算才行。
则可以有以下计算过程
在这里插入图片描述

Java实现加密算法

package encryption;
import java.util.Scanner;public class encryption {public static void main(String[] args){//读取键盘输入值Scanner sc1 = new Scanner(System.in);System.out.println("请输入明文");Scanner sc2= new Scanner(System.in);System.out.println("请输入密钥");//将读取的明文的赋给m,将读取的密钥赋给kString m=sc1.nextLine();String k=sc1.nextLine();char[] result=new char[50];//  测试使用		
//	String m="iloveyou";
//	String k="key";//	System.out.println(m.charAt(0));
//  运行结果是i
//	System.out.println(m.charAt(0)-'a');
//  运行结果是8,也就是字符i与a之间差的位数
//	System.out.println((char)(m.charAt(0)-'a'+97));
//  如果不加97强制转换成char类型会产生乱码
//	System.out.println((char)(((m.charAt(1)-'a'+k.charAt(1)-'a')%26)+97));//加密算法//java.lang.String.charAt() 方法返回指定索引处的char值int j=0,z=0;for(int i=0;i<m.length();i++)//在明文长度内循环{if(m.charAt(i)>='a' && m.charAt(i)<= 'z')  //默认输入为小写字母result[z]=(char)(((m.charAt(i)-'a'+k.charAt(j)-'a')%26)+97);	else								//大写字母result[z]=(char)(((m.charAt(i)-'A'+k.charAt(j)-'a')%26)+65);j++;if(j>=k.length()) j=0;//以密钥长度为一个周期循环z++;}System.out.println(result);}
}

运行结果为:
在这里插入图片描述

Java实现解密算法

package encryption;import java.util.Scanner;public class decrypt {public static void main(String[] args){//读取键盘输入值Scanner sc1 = new Scanner(System.in);System.out.println("请输入密文");Scanner sc2= new Scanner(System.in);System.out.println("请输入密钥");//将读取的明文的赋给m,将读取的密钥赋给kString m=sc1.nextLine();String k=sc1.nextLine();char[] result=new char[50];//加密算法//java.lang.String.charAt() 方法返回指定索引处的char值int j=0,z=0;for(int i=0;i<m.length();i++)//在明文长度内循环{if(m.charAt(i)>='a' && m.charAt(i)<= 'z')  //默认输入为小写字母result[z]=(char)(((m.charAt(i)-'a'-(k.charAt(j)-'a')+26)%26)+97);	else								//大写字母result[z]=(char)(((m.charAt(i)-'A'-(k.charAt(j)-'a')+26)%26)+65);j++;if(j>=k.length()) j=0;//以密钥长度为一个周期循环z++;}System.out.println(result);}}

运行结果

在这里插入图片描述

参考博客

强制转成char类型为什么会出现乱码(为什么要加97)
c语言实现维吉尼亚加解密算法
Java中charAt()的用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_21926.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CH579 Cortex-M0 内核低功耗蓝牙 MCU 集成 ARM 内核 32 位微控制器

概述 CH579 是集成 BLE 无线通讯的 ARM 内核 32 位微控制器。片上集成低功耗蓝牙 BLE 通讯模块、以太网控制器及收发器、全速 USB 主机和设备控制器及收发器、段式 LCD 驱动模块、ADC、触摸按键检测模块、RTC 等丰富的外设资源。 特点 32 位 ARM Cortex-M0 内核&#xff0c;…

Arduino常用函数(二)

数学函数 1、min(x,y)函数的作用是返回x&#xff0c;y两者中较小的。 2、max(x,y)函数的作用是返回x&#xff0c;y两者中较大的。 3、abs(x)函数的作用是获取x的绝对值。 4、constrain(amt,low,high)函数的工作过程是&#xff0c;如果amt小于low&#xff0c;则返回low&…

Pytho07--面向对象2

之前我们已经知道了面向对象的概念及在python中创建空类&#xff0c;带方法的类&#xff0c;带初始化方法的类&#xff0c;带实例化方法的类等并认识了类的成员。在我们将其与Java的代码进行对比后发现了python确实有它的方便之处。面向对象的内容不止之前文章中提到的那些&…

IDEA+Tomcat——前端输入数据乱码问题

IDEATomcat——前端输入数据乱码问题 给别人远程部署项目的时候&#xff0c;发现比较老的项目会出现接收前端数据是乱码的问题&#xff0c;但这个项目在我自己的电脑上却是正常的&#xff0c;通过对比发现&#xff0c;IDEA版本或Tomcat版本不同及过低是造成此问题的主要原因&am…

【数学与算法】最小生成树Spanning Trees

链接 无向图&#xff1a; 无向图的意思是&#xff0c;边没有方向。 树&#xff1a; 树是一类特殊的图&#xff0c;树是由节点和无向边构成的&#xff1b; 所有的树都是无向图&#xff0c;但是无向图未必是树&#xff1b; 树有一些性质&#xff0c;但并非所有图都有这些性质…

webrtc防抖动策略NetEq

什么是NetEq:进行抖动控制和丢包隐藏,让音频更平滑。 NetEq的位置 消除抖动的基本原理 NetEq整体架构 NetEq用到的几种缓冲区 NetEq的MCU与DSP NetEq的位置: 网络抖动的计算方式: 两个包在发送端的时间间隔为S,在接收端的间隔为R,那么抖动为J=S-R。 NetEq缓冲区设置多…

golang中struct

前面已经介绍的数组&#xff0c;slice,map有一定的相同之处&#xff0c;即处理的都是相同类型的元素&#xff0c;map中的key和value属于相同的类型&#xff0c;但如果要把多个类型的元素放到一起进行处理&#xff0c;则要使用go语言为我们提供的数据结构struct struct非常适合定…

【Arcgis操作】模块化(批量、自动化)计算多个图层的面积

有很多个图层的面积要计算&#xff0c;如果采用普通的方法&#xff0c;需要给每个图层添加【字段】&#xff0c;然后再挨个计算&#xff0c;图层少的话还好&#xff0c;图层太多的话&#xff0c;很麻烦&#xff0c;很累。 那么&#xff0c;有没有一种方法&#xff0c;能够批量…

OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作

1. 知识点 cv.namedWindow() 创建一个窗口&#xff1b;cv.createTrackbar() 创建一个轨迹栏&#xff1b;cv.getTrackbarPos() 获取对应轨迹栏的轨迹位置&#xff1b;cv.waitKey() 键盘操作返回对应的key。 2. cv.namedWindow() 函数说明 函数使用 cv.namedWindow(winname, …

【每日算法题】最后一个单词的长度(简单)

今天开始学一学算法✨&#xff0c;前两天研究了下算法&#xff0c;发现算法和数据结构是程序的灵魂&#xff0c;这句话可真没错。 今天先从简单的开始吧&#x1f601;&#xff0c;LeetCode 第 58 题&#xff1a;最后一个单词的长度 题目&#xff1a;给你一个字符串 s&#xf…

Linux下使用WPS做office的二次开发

Linux下使用WPS做office的二次开发 序 上个版本WPS在Linux上就已经支持二次开发了&#xff0c;可以直接去看官网相关的介绍。https://open.wps.cn/ 我们选择WPS的客户端进行二次开发 开发环境 Ubuntu18.04wps-office_11.1.0.9126_amd64.debQt的开发环境&#xff08;我本地…

REACT全家桶(1)

基础 一、特点 声明式设计 高效 减少dom操作 灵活 JSX JS拓展语法 组件 单向响应的数据流 二、虚拟DOM 把真实DOM树转成对象树&#xff0c;再通过diff算法&#xff0c;减少重绘与回流 三、搭建环境&#xff08;提前安装node环境&#xff09; 1.全局安装create-rea…

《图解 HTTP 》阅读笔记(三)

书接上文《图解 HTTP 》阅读笔记&#xff08;二&#xff09;&#xff0c;我们继续探索总结http的相关知识点。 我们还是先把问题摆到台面&#xff0c;带着问题读文章。 6.第九章&第十章 知识点 6.1 HTTP的瓶颈以及相应解决方案 HTTP优缺点分析的时候&#xff0c;我们是相对…

ELK+Filebead+zookeeper+kafka部署

目录 一、为什么要做日志分析平台&#xff1f; 二、ELKFilebeatKafkaZookeeper架构 三、搭建ELKFilebeatKafkaZookeeper 1、3台机子安装zookeeper 192.168.100.14/15/16 1.1 解压安装zookeeper软件包 1.2 修改Zookeeper配置配置文件 1.3 设置myid号以及启动脚本 1.4 3…

【前端修炼场】— 网页到底是添加超链接的呢

此文为【前端修炼场】第六篇&#xff0c;上一篇文章链接&#xff1a;img 标签 文章目录前言一、超链接引入二、属性值介绍2.1 href 属性值2.1.1 在同一文件路径下跳转2.1.2 跳转任意网址2.2 title 属性值2.3 target 属性值总结前言 本篇文章我将带领诸位学习如何在页面中添加超…

GitHub 供应链安全已支持 Dart 开发者生态

通过 Dart 和 GitHub 团队的共同努力&#xff0c;自 10 月 7 日起&#xff0c;GitHub 的 Advisory Database (安全咨询数据库)、Dependency Graph (依赖项关系图) 和 Dependabot (依赖更新机器人) 开始支持 Dart 开发者生态&#xff0c;这也意味着 GitHub 为 Dart 和 Flutter 应…

单商户商城系统功能拆解13—分类管理

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

LNMP网站架构

LNMP网站架构 文章目录LNMP架构简介LNMP是什么&#xff1f;LNMP架构的优点LNMP与LAMP的区别LNMP的工作原理知识拓展FastCGINginxFastCGIPHP-FPM搭建LNMP架构部署Nginx部署MySQL部署PHP连接nginx与phpnginx配置php配置LNMP架构简介 LNMP是什么&#xff1f; LNMP是Linux系统下N…

智能CDN(下):CDN的未来发展方向

一、中心思想&#xff1a; 利用CDN网络来发布域名的DNS记录&#xff0c;承载域名解析服务器的功能&#xff0c;即CDN网络中的智能CDN服务器可以直接返回给客户边缘节点CDN服务器的IP网址。 二、发展方向&#xff1a; 首先&#xff0c;CDN的重定向技术是根据域名解析服务器的…

基于FT2000+模块PS1600国产40G网卡验证说明

1、背景介绍 由于全国产化需求&#xff0c;需要在飞腾平台上使用PS1600 40G网卡替换Mellanox CX5&#xff0c;平台内部还是使用CTC8096作为交换芯片&#xff0c;示意框图如下&#xff1a; 2、交换配置 CTC8096需要将与PS1600相连的端口改为自协商关闭&#xff0c;否则无法lin…