第四十九篇: JAVA加密解密之凯撒加密(Caesar cipher)算法

xiaoxiao2021-02-28  129

凯撒加密算法简介

凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,x会被替换为a。

凯撒加密算法实现

package com.jianggujin.codec; /** * 凯撒加密 * * @author jianggujin * */ public class HQCaesar { private static HQCaesar caesar = new HQCaesar(); public static HQCaesar getInstance() { return caesar; } private HQCaesar() { } public String encrypt(String str, int k) { StringBuilder result = new StringBuilder(); for (char c : str.toCharArray()) { // 如果字符串中的某个字符是小写字母 if (c >= 'a' && c <= 'z') { c += k % 26; // 移动key&位 if (c < 'a') c += 26; // 向左超界 if (c > 'z') c -= 26; // 向右超界 } // 如果字符串中的某个字符是大写字母 else if (c >= 'A' && c <= 'Z') { c += k % 26; // 移动key&位 if (c < 'A') c += 26;// 同上 if (c > 'Z') c -= 26;// 同上 } result.append(c); } return result.toString(); } public String decrypt(String str, int k) { // 取相反数 k = 0 - k; return encrypt(str, k); } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556

测试代码:

import org.junit.Test; import com.jianggujin.codec.HQCaesar; public class CaesarTest { HQCaesar caesar = HQCaesar.getInstance(); @Test public void encode() { String data = "jianggujin"; int k = 4; String result = caesar.encrypt(data, k); System.err.println("加密后:" + result); System.err.println("解密后:" + caesar.decrypt(result, k)); } } 123456789101112131415161718 123456789101112131415161718

测试结果:  加密后:nmerkkynmr  解密后:jianggujin

转载请注明原文地址: https://www.6miu.com/read-29537.html

最新回复(0)