
正文
凯撒加密器java源代码 凯撒加密的基本原理
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用java 编写一个凯撒加密和解密
import java.util.Scanner;
public class Caeser {
private String table; // 定义密钥字母表
private int key; // 定义密钥key
public Caeser(String table, int key) {
// 根据不同的字母表和不同的密钥生成一个新的凯撒算法,达到通用的目的
super();
this.table = table;
this.key = key;
}
public String encrypt(String from) {
//凯撒加密算法,传入明文字符串,返回一个密文字符串
String to = "";
for (int i = 0; i from.length(); i++) {
to += table.charAt((table.indexOf(from.charAt(i))+key)%table.length());
}
return to;
}
public static void main(String[] args) {
Caeser caeser = new Caeser("abcdefghijklmnopqrstuvwxyz", 3);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要加密的字符串");
String str =scanner.nextLine(); //输入字符串 security
String result = caeser.encrypt(str); //调用加密方法进行加密
System.out.print(result); // 可得结果 vhfxulwb
}
}
相关问答
Q1: 凯撒加密器:用java知识、输入一句英文、现实出加密器的密码? 拜托各位高手、
public static void main(String args[])
throws Exception{
String s=args[0];
int key=Integer.pareseInt(args[1]);
String es="";
for(int i=0;is.length();i++)
{ char a=s.charAt(i);
if(c=`a` c=`z`) //是小写字母
( c+=key%26; //移动key%26位
if(c`a`) c+=26; //向左超界
if(c`z`) c-=26; //向右超界
}
else if(c=`A` c=`Z`) //是大写字母
( c+=key%26;
if(c`A`) c+=26;
if(c`Z`) c-=26;
}
es+=c;
}
System.out.println(es);
}
这个是我写的代码,把它写的编程软件上就OK了。
Q2: 开源项目:凯撒密码转换器
几天前一次和朋友聊天谈到了加密聊天,于是想到了凯撒密码,随之就是想用自己的一点烂技术写点好玩的:
下面是成品说明
本程序可以将用户输入的内容通过 非固定的凯撒密码字典 进行加/解密,是一种好用加密的加密聊天方式。
Caesar cipher,发明者Caesar(凯撒),罗马人。
根据苏维托尼乌斯的记载,恺撒曾用此方法对重要的军事信息进行加密:
如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。
同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;他用A代表Z。
另外,有证据表明,恺撒曾经使用过更为复杂的密码系统:文法学家普罗布斯曾经写过一份独具创新的手稿,研究恺撒书信中包含有秘密信息的字母。
已经无法弄清恺撒密码在当时有多大的效果,但是有理由相信它是安全的。因为恺撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了恺撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。现存最早的破解方法记载在公元9世纪阿拉伯的阿尔·肯迪的有关发现频率分析的著作中。
这是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,当年凯撒曾用此方法与其将军们进行联系。
进入程序后,会有像下面这样的提示:
随便输入一段英文(此程序仅支持英文和数字,原因看原理):例如 Fuck you
然后回车:
我们在这输入的是可看的原文,所以我们要加密,输入1,回车:
我们以位移+3(这是当年的默认值,输入其他值可以为负,但是必须加负号,正数的正号加不加无所谓)为例,输入并回车:
程序里面用了循环,所以输出完后会自动进行下一次,这适合正在加密聊天的折腾者。
同样,我们把加密好的文本复制完后重新输入,选择2进行反加密(解密),位移了多少仍然填3:
这样解密就成功了,是不是真的很适合爱折腾的你?赶紧发给你的朋友,约定一个固定的位移数(加密密钥)进行愉快的无限制聊天吧!
存放主程序及图标文件
英文版主程序(在en-ww文件夹内)
程序图标,透明底的
中文版主程序
日志文件,主要通过自编模块 keeplog 生成,内容为“日期(Y/M/D)+时间(h/m/s)+加密密钥+输入/输出内容+分割线”
Q3: 怎么用凯撒加密法对一段控制台接受的字符串加密(运用java方面的知识)
import java.util.Scanner;
public class Caesar {
private final static char UPPERLASTCHAR = 'Z';
private final static char LOWERLASTCHAR = 'z';
private final static char UPPERFIRSTCHAR = 'A';
private final static char LOWERFIRSTCHAR = 'a';
public static String cipher(String encodeString, int shift) {
int i;
String result = "";
for (i = 0; i encodeString.length(); i++) {
char ch = (char) (encodeString.charAt(i) + shift);
char first = ch = 'a' ch = 'z' ? LOWERFIRSTCHAR : UPPERFIRSTCHAR;
char last = ch = 'a' ch = 'z' ? LOWERLASTCHAR : UPPERLASTCHAR;
if( ch last)
ch = (char) (ch % last + first - 1);
result += ch ;
}
return result;
//abcdefghijklmnopqrstuvwxyz 3
//ABCDEFGHIJKLMNOPQESTUVWXYZ 3
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String xx;
int shift;
xx = in.next();
shift = in.nextInt();
System.out.println(cipher(xx, shift));
}
}
Q4: 各位大哥,在Java中用数组写的循环队列实现凯撒循环密码啊?
import java.*;
public class Practise {
public static void main(String[] args) {
String P = new String();// 明文
String K = new String();// 密钥
String C = new String();// 密文
short LR=-1;//间隔的方向,向左为-1,向右为1
P = "benrencainiaoyizhi";
K = "P";
C = "QTCGTCRPXCXPDNXOWX";
System.out.println("明文:"+P);
System.out.println("密钥:"+K);
System.out.println("密文:"+C+"\n");
CaesarCode caesar=new CaesarCode();
LR=1;
System.out.println("加密:"+caesar.encrypt(P, K, LR));
LR=-1;
System.out.println("解密:"+caesar.decrypt(K, C, LR).toLowerCase());
}
}
class CaesarCode {
private char alphabet[] = new char[26];//存储字母表
//加密
protected String encrypt(String P,String K,short LR)
{
int i=0,j=0,n=0;//n是间隔
String C=new String();//密文
P=P.toUpperCase();
P=getNewP(P);
K=K.toUpperCase();
n=getN(K);
//将明文转换成密文
for(i=0;iP.length();i++)
{
j=String.valueOf(alphabet).indexOf(P.charAt(i));//获取密文字母在字母表所在的下标
j=(j+n*LR+26)%26;//向左或向右移动n位
C+=(char)(j+65);
}
return C;
}
//解密
protected String decrypt(String K,String C,short LR)
{
int i=0,j=0,n=0;//n是间隔
String P=new String();//明文
K=K.toUpperCase();
C=C.replaceAll(" +"," ");
C=C.toUpperCase();
n=getN(K);
//将密文转换成明文
for(i=0;iC.length();i++)
{
j=String.valueOf(alphabet).indexOf(C.charAt(i));//获取密文字母在字母表所在的下标
j=(j+n*LR+26)%26;//向左或向右移动n位
P+=(char)(j+65);
}
return P;
}
//获取经过处理的明文
private String getNewP(String P)
{
int i=0;
char p[] = P.toCharArray();
for (i = 0; i P.length(); i++) {
if (p[i] 'A' || p[i] 'Z')// 将非字母换成空格
{
p[i] = ' ';
}
}
P = String.valueOf(p);
P = P.replaceAll(" +", "");// 将明文的所有空格去掉
return P;
}
//获取间隔
private int getN(String K)
{
int i=0,n=0;
//生成字母表
for(i=0;i26;i++)
{
alphabet[i]=(char)(i+65);//字母A在ASCII表中的值是065
}
if(isNum(K))
{
n=Integer.parseInt(K);
}
else
{
n=String.valueOf(alphabet).indexOf(K);//当K不是数字时适用
}
return n;
}
//判断密钥是否为数字
private boolean isNum(String K)
{
return K.matches("[0-9]+");//+表示1个或多个(如"3"或"225")
}
}
关于凯撒加密器java源代码和凯撒加密的基本原理的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







