All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.codec.Caesar Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.core.codec;

import cn.hutool.core.lang.Assert;

/**
 * 凯撒密码实现
* 算法来自:https://github.com/zhaorenjie110/SymmetricEncryptionAndDecryption * * @author looly */ public class Caesar { // 26个字母表 public static final String TABLE = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; /** * 传入明文,加密得到密文 * * @param message 加密的消息 * @param offset 偏移量 * @return 加密后的内容 */ public static String encode(String message, int offset) { Assert.notNull(message, "message must be not null!"); final int len = message.length(); final char[] plain = message.toCharArray(); char c; for (int i = 0; i < len; i++) { c = message.charAt(i); if (false == Character.isLetter(c)) { continue; } plain[i] = encodeChar(c, offset); } return new String(plain); } /** * 传入明文解密到密文 * * @param cipherText 密文 * @param offset 偏移量 * @return 解密后的内容 */ public static String decode(String cipherText, int offset) { Assert.notNull(cipherText, "cipherText must be not null!"); final int len = cipherText.length(); final char[] plain = cipherText.toCharArray(); char c; for (int i = 0; i < len; i++) { c = cipherText.charAt(i); if (false == Character.isLetter(c)) { continue; } plain[i] = decodeChar(c, offset); } return new String(plain); } // ----------------------------------------------------------------------------------------- Private method start /** * 加密轮盘 * * @param c 被加密字符 * @param offset 偏移量 * @return 加密后的字符 */ private static char encodeChar(char c, int offset) { int position = (TABLE.indexOf(c) + offset) % 52; return TABLE.charAt(position); } /** * 解密轮盘 * * @param c 字符 * @return 解密后的字符 */ private static char decodeChar(char c, int offset) { int position = (TABLE.indexOf(c) - offset) % 52; if (position < 0) { position += 52; } return TABLE.charAt(position); } // ----------------------------------------------------------------------------------------- Private method end }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy