• 在密码学中,恺撒密码是一种最简单并且最广为人知的加密技术。
    • 它是一种替换加密的技术,明文中的所欲字母都在字母表上向后(或向前)按照一个固定的数目进行偏移后被替换成密文。
    • 例如:当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
    • 这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
    • 恺撒密码通常被座位其他更复杂的加密方法中的一个步骤。

    恺撒加密 - 图1

    1. public class KaisaUtil {
    2. /***
    3. * 使用凯撒加密方式加密数据
    4. * @param orignal 原文
    5. * @param key 密钥
    6. * @return 加密后的字符
    7. */
    8. private static String encryptKaisa(String orignal, int key) {
    9. //将字符串转换为数组
    10. char[] chars = orignal.toCharArray();
    11. StringBuffer buffer = new StringBuffer();
    12. //遍历数组
    13. for(char aChar : chars) {
    14. //获取字符的ASCII编码
    15. int asciiCode = aChar;
    16. //偏移数据
    17. asciiCode += key;
    18. //将偏移后的数据转为字符
    19. char result = (char)asciiCode;
    20. //拼接数据
    21. buffer.append(result);
    22. }
    23. return buffer.toString();
    24. }
    25. /**
    26. * 使用凯撒加密方式解密数据
    27. *
    28. * @param encryptedData :密文
    29. * @param key :密钥
    30. * @return : 源数据
    31. */
    32. private static String decryptKaiser(String encryptedData, int key) {
    33. // 将字符串转为字符数组
    34. char[] chars = encryptedData.toCharArray();
    35. StringBuilder sb = new StringBuilder();
    36. // 遍历数组
    37. for (char aChar : chars) {
    38. // 获取字符的ASCII编码
    39. int asciiCode = aChar;
    40. // 偏移数据
    41. asciiCode -= key;
    42. // 将偏移后的数据转为字符
    43. char result = (char) asciiCode;
    44. // 拼接数据
    45. sb.append(result);
    46. }
    47. return sb.toString();
    48. }
    49. public static void main(String[] args) {
    50. String str = "open fire";
    51. String encode = encryptKaisa(str, 3);
    52. System.out.println("加密后:"+encode);
    53. String decode = decryptKaiser(encode, 3);
    54. System.out.println("解密后:"+decode);
    55. }
    56. }