導航:首頁 > 源碼編譯 > java凱撒加密演算法

java凱撒加密演算法

發布時間:2024-05-27 19:38:30

『壹』 凱撒加密

凱撒加密法的替換方法是通過排列明文和密文字母表,密文字母表示通過將明文字母表向左或向右移動一個固定數目的位置。例如,當偏移量是左移3的時候(解密時的密鑰就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用時,加密者查找明文字母表中需要加密的消息中的每一個字母所在位置,並且寫下密文字母表中對應的字母。需要解密的人則根據事先已知的密鑰反過來操作,得到原來的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
凱撒加密法的加密、解密方法還能夠通過同餘的數學方法進行計算。首先將字母用數字代替,A=0,B=1,...,Z=25。此時偏移量為n的加密方法即為:
En(x)=(x+n)mod26{\displaystyle E_{n}(x)=(x+n)\mod 26}
解密就是:
Dn(x)=(x−n)mod26{\displaystyle D_{n}(x)=(x-n)\mod 26}

『貳』 各位大哥,在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 = "benrencainiaoyi";
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;i<P.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;i<C.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;i<26;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編程實現圖形界面化代碼

class Caesar: def __init__(self): a = list(' ,.-!\'"') 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)

『肆』 用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
}
}

『伍』 JAVA凱撒密碼 選擇問題

【看法】:
你的加密解密其實就是同一個方法,你是完全復制的,呵呵,連提示的話都沒有改,那就給方法設置一個參數,根據參數判斷是加密還是解密,其實就是提示不同罷了。
凱撒密碼是最最原始的線性對稱密碼。
我給的選擇菜單只有兩個按鈕,就是【加密】【解密】。顯示都在控制台了,呵呵,你也可以自己在菜單上加一個JTextArea,把他們顯示在菜單上面。
【代碼】:
package Exam;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
/**
*
* @author [email protected]
* Mar 5, 20103:11:29 PM
*/
public class Exam_exam01 extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JFrame Jf;
JPanel Jp;
JButton but1,but2;
public void Menu(){//簡單的選擇頁面
Jf=new JFrame("凱撒密碼");
Jp=new JPanel();
but1=new JButton("加密");
but2=new JButton("解密");
Jp.add(but1);but1.addActionListener(this);
Jp.add(but2);but2.addActionListener(this);
Jf.add(Jp);
Jf.setSize(300,200);
Jf.setVisible(true);
}
public void actionPerformed(ActionEvent e){//事件處理
if(e.getSource()==but1) Cipher(0);
if(e.getSource()==but2) Cipher(1);
}
public void Cipher(int iNum){//凱撒密碼 加密解密
try{
char b[];//存放密文
BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));
if(iNum==0)System.out.println("請輸入一段明文(只能輸入小寫字母):");
if(iNum==1)System.out.println("請輸入一段密文(只能輸入小寫字母):");
String str2=br2.readLine();
b=str2.toCharArray();
if(iNum==0)System.out.println("密文為:");
if(iNum==1)System.out.println("明文為:");
for(int k=1;k<=26 ;k++ ){
for(int i=0;i<str2.length();i++){
char s=(char)((b[i]-'z'-k)%26+'z');//此處寫「((b[i]-'a'-1)%26+'a')」也行
System.out.print(s);
}
System.out.println(" 密匙K="+k);
}
if(iNum==0)System.out.println("請在以上結果中查找可能的密文");
if(iNum==1)System.out.println("請在以上結果中查找可能的明文");
}catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
Exam_exam01 ee=new Exam_exam01();
ee.Menu();
}
}

閱讀全文

與java凱撒加密演算法相關的資料

熱點內容
程序員那麼可愛姜逸城初戀 瀏覽:495
modbustcp編程 瀏覽:490
實況為什麼安卓看不了 瀏覽:129
Java多線程Queue 瀏覽:94
雲伺服器499元三年 瀏覽:980
nbd源碼 瀏覽:846
x86在arm上編譯 瀏覽:7
linux怎麼配置網路 瀏覽:307
程序員想要的小禮物 瀏覽:186
java獲取網頁url 瀏覽:624
怎麼做解壓神器泡泡版 瀏覽:966
自己動手做一個c編譯器 瀏覽:929
手機如何鏈接谷歌伺服器地址 瀏覽:137
廢掉一個程序員的武功 瀏覽:249
java樹形演算法 瀏覽:641
通達信加鎖指標源碼怎麼看 瀏覽:754
將同名文件移動到部分同名文件夾 瀏覽:403
擺盪指標加壓力線源碼 瀏覽:915
新一代單片機特徵 瀏覽:770
王者的伺服器什麼時候才修好 瀏覽:281