
正文
java凯撒加密代码 凯撒加密方法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
各位大哥,在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")
}
}
相关问答
Q1: 凯撒密码java编程实现图形界面化代码
class Caesar: def __init__(self): a = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.-!\'"') b = a[3:] + a[:3] self.emap = dict(zip(a,b)) self.dmap = dict(zip(b,a)) def encode(self, text): tmp = [ (x in self.emap and self.emap[x] or x) for x in text ] return ''.join(tmp) def decode(self, text): tmp = [ (x in self.dmap and self.dmap[x] or x) for x in text ] return ''.join(tmp)
Q2: 凯撒密码判断是不是整型,请高手指点。如下代码condition处
Scanner.nextInt() 返回的就是int类型,一定是整数,不会不是整数的
Q3: 请教啊!java加密算法!要求用户输入要加密的字符(英文字符其他的不考虑)题目如下:我主要问的是《加密
public class Swither {
public static void main(String[] args) {
System.out.println("ab,cdx;yz中国");
System.out.println(Encryption.encryption( "ab,cdx;yz中国"));
System.out.println(Decryption.decryption((Encryption.encryption( "ab,cdx;yz中国"))));
}
}
运行结果如下:
ab,cdx;yz中国
de,fga;bc中国
ab,cdx;yz中国
public class Encryption {
public static String encryption(String content)
{
if(content==null)
return null;
String temp="";
for(int i=0;icontent.length();i++)
{
char c=content.charAt(i);
//if(Character.isLetter(c))
if((c='a' c='z')||(c='A' c='Z'))
if(c=='x' || c=='y' || c=='z' || c=='X' || c=='Y' || c=='Z')
c=(char)(c-23);
else
c=(char)(c+3);
temp+=c;
}
return temp;
}
}
public class Decryption {
public static String decryption(String content)
{
if(content==null)
return null;
String temp="";
for(int i=0;icontent.length();i++)
{
char c=content.charAt(i);
//if(Character.isLetter(c))
if((c='a' c='z')||(c='A' c='Z'))
if(c=='a' || c=='b' || c=='c' || c=='A' || c=='B' || c=='C')
c=(char)(c+23);
else
c=(char)(c-3);
temp+=c;
}
return temp;
}
}
Q4: java Caesar密码程序 凯撒密码问题!!!char c = abc.charAt(i);
不用类也是可以做的,不过看起来有些哆嗦,随便看一下吧,自己再改简单一点
using namespace std;
const int N=20;
void main()
{ int k;
void encipher(char c[],int b);
void decipher(char c[],int b);
char plaintext[N];
cout"Please enter the keywards k(0k26):"endl;
cink;
cout"Please enter the plaintext:"endl;
cinplaintext;
cout"the ciphertext is:";
encipher(plaintext,k);
cout"the plaintext is:";
decipher(plaintext,k);
}
void encipher(char c[],int b)
{
int i;
int a[N];
for(i=0;iN;i++)
a[i]=c[i]; //注:128~255是IBM-PC上专用的,ASCII代码中000-127是标准的,如果是z加20的就会超出128,故先赋给整型,然后再转换过来,
for(i=0;a[i]!='\0'iN;i++)
{
if((a[i]='A'a[i]='Z')||(a[i]='a'a[i]='z'))
{
a[i]=a[i]+b;
if((a[i]'Z'a[i]='Z'+b)||(a[i]'z'))
a[i]=a[i]-26;}
}
for(i=0;iN;i++)
c[i]=a[i];
for(i=0;iN;i++)
coutc[i];
coutendl;
}
void decipher(char c[],int b)
{
int i;
for(i=0;c[i]!='\0'iN;i++)
{
if((c[i]='A'c[i]='Z')||(c[i]='a'c[i]='z'))
{
c[i]=c[i]-b;
if((c[i]='a'-bc[i]'a')||c[i]'A')
c[i]=c[i]+26;}
}
for(i=0;iN;i++)
coutc[i];
}
关于java凯撒加密代码和凯撒加密方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







