古典密码算法------替代密码算法

简介:

替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母abc,用DEFG做对应替换后形成密文。

替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:

E(m)=(m+k) mod n

其中:m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。

例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L

E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

 
  1. package cn.hdu.edu.encrypt;  
  2.  
  3.  
  4. /*  
  5.  * 古典密码算法之  替代算法  
  6.  *   
  7.  */ 
  8. public class Replace {  
  9.  
  10.     //当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR  
  11.     private final static int CRYPT_OK =     1;    
  12.     private final static int CRYPT_ERROR = 0;  
  13.     //设定一共有26个可用字母  字母a的编码是97  
  14.     private final static int totalLetter = 26;  
  15.     private final static int key = 3;  
  16.  
  17.     /*  
  18.      * @param initCode 没有加密前的字符串  
  19.      * @CRYPT_OK 加密成功  
  20.      * @CRYPT_ERROR 加密失败  
  21.      */ 
  22.     public static int encrypt(String initCode)throws Exception{  
  23.     //用来输出加密后的字符      
  24.     StringBuilder sb = new StringBuilder();  
  25.     for(int i = 0; i < initCode.length(); i++ ){  
  26.             int initCodeVal = initCode.charAt(i ) - 96;  
  27.             int targetCodeVal = (initCodeVal + key ) % totalLetter;  
  28.             if(targetCodeVal == 0) targetCodeVal = 26;  
  29.             char targetCode =  (char)(targetCodeVal +96);         
  30.             sb.append(targetCode );  
  31.     }  
  32.     //以下就是加密后的字符  
  33.     String targetCode = sb.toString();  
  34.     System.out.println(targetCode);  
  35.         return CRYPT_OK;  
  36.     }  
  37.       
  38.     /*  
  39.      * @param targetCode 加密前的字符串  
  40.      * @CRYPT_OK 解密成功  
  41.      * @CRYPT_ERROR 解密失败  
  42.      */ 
  43.     public static int decrypt(String targetCode)throws Exception{  
  44.     //用来输出解密后的字符      
  45.     StringBuilder sb = new StringBuilder();  
  46.     for(int i = 0; i < targetCode.length(); i++ ){  
  47.             int targetCodeVal = targetCode.charAt(i ) - 96;  
  48.               
  49.             //如果已经来到了字母表的开头   给他还回去  
  50.             if(targetCodeVal <= key)     targetCodeVal += 26;  
  51.                   
  52.             int initCodeVal = targetCodeVal - key;  
  53.             char initCode =  (char)(initCodeVal + 96);  
  54.             sb.append(initCode );  
  55.     }  
  56.     //以下就是解密后的字符  
  57.     String initCode = sb.toString();  
  58.     System.out.println(initCode);  
  59.         return CRYPT_OK;  
  60.     }  
  61.       
  62.       
  63.       
  64.       
  65. }  

 本文转自 nileader 51CTO博客,原文链接:http://blog.51cto.com/nileader/297609,如需转载请自行联系原作者

相关文章
|
7月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
7月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
8月前
|
存储 人工智能 算法
解锁分布式文件分享的 Java 一致性哈希算法密码
在数字化时代,文件分享成为信息传播与协同办公的关键环节。本文深入探讨基于Java的一致性哈希算法,该算法通过引入虚拟节点和环形哈希空间,解决了传统哈希算法在分布式存储中的“哈希雪崩”问题,确保文件分配稳定高效。文章还展示了Java实现代码,并展望了其在未来文件分享技术中的应用前景,如结合AI优化节点布局和区块链增强数据安全。
|
8月前
|
JavaScript 算法 安全
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
|
7月前
|
存储 算法 测试技术
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
|
7月前
|
算法 安全 调度
【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
|
7月前
|
存储 人工智能 算法
【深度优先搜索篇】走迷宫的魔法:算法如何破解迷宫的神秘密码
【深度优先搜索篇】走迷宫的魔法:算法如何破解迷宫的神秘密码
|
存储 算法 安全
密码算法的分类
【8月更文挑战第23天】
746 0
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
147 0
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
169 0

热门文章

最新文章