(1)Caesar密码算法的Java实现

利用Caesar密码算法对英文明文进行加密解密:
**一般化的恺撒加密算法为: C = E(k, p) = (p + k) mod 26
一般化的恺撒解密算法为: p = D(k, C) = (C - k) mod 26**
根据凯撒密码的思想,编写相应的Java代码:

/**
 * 凯撒密码
 * 英文字母26种方式
 * @author Angela
 */
/**
 * 一般化的恺撒加密算法为: C = E(k, p) = (p + k) mod 26
 * 一般化的恺撒解密算法为: p = D(k, C) = (C - k) mod 26   
 */
public class Caesar {  

    /**
     * 对单个字母进行加密
     * @param ch 字母
     * @param n 密钥
     * @return 加密后的字母
     */
    public static char encrypt(char ch,int n){
        int unicode;
        int c=ch-'a';
        if(c+n>'z') unicode=c+n-26;
        else unicode=c+n;
        return (char)(unicode%26+'a');
    }

    /**
     * 对明文进行加密
     * @param str 明文字符串
     * @param n 密钥
     * @return  对明文加密后的密文
     */
    public static String encrypt(String str,int n){
        char[] ch=str.toCharArray();
        StringBuilder sb=new StringBuilder();
        for(char c: ch){
            sb.append(encrypt(c,n));
        }
        return sb.toString();
    }  

    /**
     * 将加密后的字母解密
     * @param ch 加密后的字母
     * @param n 密钥
     * @return 解密后的字母
     */
    public static char decrypt(char ch,int n){
        int unicode;
         int c=ch-'a';
        if(c-n<'a') unicode=c-n+26;
        else unicode=c-n;
        return (char)(unicode%26+'a');
    }

    /**
     * 将密文解密
     * @param str 密文
     * @param n 密钥
     * @return 解密后的明文
     */
    public static String decrypt(String str,int n){
        char[] ch=str.toCharArray();
        StringBuilder sb=new StringBuilder();
        for(char c: ch){
            sb.append(decrypt(c,n));
        }
        return sb.toString();
    }

    public static void main(String args[]){
        String str="OGGV OG CHVGT VJG VQIC RCTVA";
        String[] words=str.toLowerCase().split(" ");
        for(int i=0;i<26;i++){
            System.out.print(i+" ");
            for(String word: words){
                System.out.print(decrypt(word,i)+" ");
            }
            System.out.println();
        }
        str="meet me after the toga party";
        String[] ws=str.split(" ");
        System.out.print("验证:");
        for(String w: ws){
            System.out.print(encrypt(w,2)+" ");
        }
    }    

}

运行程序,结果如下:
0 oggv og chvgt vjg vqic rctva
1 nffu nf bgufs uif uphb qbsuz
2 meet me after the toga party
3 ldds ld zesdq sgd snfz ozqsx
4 kccr kc ydrcp rfc rmey nyprw
5 jbbq jb xcqbo qeb qldx mxoqv
6 iaap ia wbpan pda pkcw lwnpu
7 hzzo hz vaozm ocz ojbv kvmot
8 gyyn gy uznyl nby niau julns
9 fxxm fx tymxk max mhzt itkmr
10 ewwl ew sxlwj lzw lgys hsjlq
11 dvvk dv rwkvi kyv kfxr grikp
12 cuuj cu qvjuh jxu jewq fqhjo
13 btti bt puitg iwt idvp epgin
14 assh as othsf hvs hcuo dofhm
15 zrrg zr nsgre gur gbtn cnegl
16 yqqf yq mrfqd ftq fasm bmdfk
17 xppe xp lqepc esp ezrl alcej
18 wood wo kpdob dro dyqk zkbdi
19 vnnc vn jocna cqn cxpj yjach
20 ummb um inbmz bpm bwoi xizbg
21 tlla tl hmaly aol avnh whyaf
22 skkz sk glzkx znk zumg vgxze
23 rjjy rj fkyjw ymj ytlf ufwyd
24 qiix qi ejxiv xli xske tevxc
25 phhw ph diwhu wkh wrjd sduwb
验证:oggv og chvgt vjg vqic rctva

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值