java汉明码解密

前言:最近由于学校的比赛,接触了汉明码解密,在这里给大家分享一下(只用了几种比较简单的方法)。

当时题目是 使用给的原始信息由6个ASCII码(7bit)字符构成,经过汉明码编码后得到6字节的数据,使用该数据作为红外线控制码。具体代码如下(因为是自学所以编码可能不太规范):

  1 1 public class asf {
  2   2     static String rtun="ABCASD";
  3   3     static int dx=1,j=0,b=0,z=0,m=0,k=0,b1=0,b2=0,b3=0;
  4   4     static String ch="";
  5   5     static String a1="";
  6   6     static String a2="";
  7   7     static String a3="";
  8   8     static String ch1="";
  9   9     static String zhongjian;
 10  10     static char zifu;
 11  11     static char a=‘1‘;
 12  12     static int h=1;
 13  13 public static void main(String[] args) throws Exception {
 14  14     System.out.print(a1);
 15  15     for(int i=0;i<rtun.length();i++){
 16  16         char c=rtun.charAt(i);
 17  17         //判断字符串中的大写字母
 18  18         if(((int)c>=65)&&((int)c<=90)){
 19  19             a1=a1+(char)c;
 20  20             b1++;
 21  21         }
 22  22         //判断是否为字符串中的小写字母
 23  23         else if(((int)c>=97)&&((int)c<=122)){
 24  24             b2++;
 25  25             a2=a2+(char)c;
 26  26         }//剩下的字符
 27  27         else{
 28  28             a3=a3+(char)c;
 29  29             b3++;
 30  30         }
 31  31     }
 32  32     for(int j2=0;j2<a1.length();j2++){
 33  33         //转变为二进制数
 34  34
 35  35         /* 进行拼接
 36  36          * 字符串之间的拼接
 37  37          * 注意:
 38  38          *   低位是第一个   高位是最后一个
 39  39          */
 40  40         zifu = a1.charAt(j2);
 41  41         zhongjian =(String)Integer.toBinaryString(zifu);
 42  42         //System.out.print(zhongjian);
 43  43         //假如是数字的话 前边补零
 44  44         while(zhongjian.length()<7)
 45  45         {
 46  46             zhongjian=‘0‘+zhongjian;
 47  47         }
 48  48         ch1=ch1+zhongjian;
 49  49 }
 50  50     //System.out.print(ch1);
 51  51     for(int i=1;i<ch1.length()+7;i++){
 52  52     if(i==dx){
 53  53             dx = dx*2;
 54  54             zifu=‘ ‘;
 55  55         }else{
 56  56             zifu = ch1.charAt(j);
 57  57             j++;
 58  58         }
 59  59         ch=ch+zifu;
 60  60     }
 61  61     //System.out.print("/n");
 62  62     //System.out.print(ch);
 63  63     //System.out.print("/n");
 64  64     //把“数据”行值为1的位置值进行二进制编码异或
 65  65     int hu=0xff;
 66  66     for(int i=0;i<ch.length();i++){
 67  67         zifu=ch.charAt(i);
 68  68         if(a==zifu){
 69  69             int[] shuju=new int[100];
 70  70             shuju[z] = i+1;
 71  71             System.out.println(shuju[z]);
 72  72             if(h==1)
 73  73             {
 74  74                 //System.out.print(i);
 75  75                 hu=shuju[z];
 76  76                 z++;
 77  77                 h--;
 78  78             }
 79  79             else
 80  80             {
 81  81             hu = hu ^ shuju[z];
 82  82             //System.out.println(hu);
 83  83             z++;
 84  84             }
 85  85         }
 86  86
 87  87     }
 88  88     //得来的数据进行二进制编码
 89  89     String shu="";
 90  90     shu = Integer.toBinaryString(hu);
 91  91     while(shu.length()!=6)
 92  92     {
 93  93         shu = ‘0‘ + shu;
 94  94     }
 95  95     System.out.println(shu);
 96  96     //对效验码进行逆顺序排列
 97  97     String nima="";
 98  98     for(int i=shu.length()-1;i>=0;i--){
 99  99         nima=nima + shu.charAt(i);
100 100     }
101 101     //把效验码填入到数据中
102 102     String numb="";
103 103     for(int i=0;i<ch.length();i++){
104 104         if(ch.charAt(i)==‘ ‘){
105 105             numb = numb + nima.charAt(m);
106 106             m++;
107 107         }else{
108 108             numb = numb + ch.charAt(i);
109 109         }
110 110     }
111 111     System.out.println(numb);
112 112     char yu;
113 113     String stry="";
114 114     int[] str= new int[6];
115 115         for(int i=0;i<numb.length();i++){
116 116         yu=numb.charAt(i);
117 117         stry=stry + yu;
118 118         if((i+1)%8==0){
119 119             //把字符串二进制变为十进制
120 120             String asd = Integer.valueOf("0101",2).toString();
121 121             int ddy =  Integer.parseInt(asd);
122 122             //十进制转化为十六进制
123 123             String ssa = Integer.toHexString(ddy);
124 124             //int n = OxStringtoInt(ssa);
125 125
126 126         }
127 127     }
128 128   }
129 129 }
时间: 2024-10-08 14:39:45

java汉明码解密的相关文章

160829、Java加解密与数字签名

** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二.消息摘要算法加密————主要用于验证数据完整性. MD(消息摘要): SHA(安全散列) JDK实现和MD一样. BC实现如下:(Digest类) CC实现最简单(就是一个DigestUtils的静态方法): MAC(消息认证码)——含有密钥的散列函数算法 兼容MD和SHA的特性,但加入了密钥.

10.Java 加解密技术系列之 DH

Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然,可能有很多人对这种加密算法并不是很熟悉,不过没关系,希望今天这篇文章能帮助你熟悉他. 原理 整个通信过程中g.g^a.g^b是公开的,但由于g.a.b都是整数,通过g和g^a得到a还是比较容易的,b也是如此,所以最终的“密钥”g^(a*b)还是可以被计算出来的.所以实际的过程还需要在基本原理上加入

8.Java 加解密技术系列之 PBE

Java 加解密技术系列之 PBE 序 概念 原理 代码实现 结束语 序 前 边的几篇文章,已经讲了几个对称加密的算法了,今天这篇文章再介绍最后一种对称加密算法 — — PBE,这种加密算法,对我的认知来说,并没有 DES.3DES.AES 那么流行,也不尽然,其实是我之前并没有这方面的需求,当然接触他的机会也就很少了,因此,可想而知,没听过显然在正常不过了. 概念 PBE,全称为“Password Base Encryption”,中文名“基于口令加密”,是一种基于密码的加密算法,其特点是使用

11.Java 加解密技术系列之 总结

Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的保护.同时,由于水平的限制,打算这个系列就到此为止了,这篇文章就算是一个总结吧,回顾一下这几个月来都写了些什么. 背景 其 实,在开始写这个系列之前,我对于 Java 的加解密也并不是那么了解.之所以要写这些文章,还主要是由于工作的原因.记得几个月以前,当时项目要做一个数字证书,证书的生成.存储.传

6. Java 加解密技术系列之 3DES

Java 加解密技术系列之 3DES 序 背景 概念 原理 代码实现 结束语 序 上一篇文章讲的是对称加密算法 — — DES,这篇文章打算在 DES 的基础上,继续多讲一点,也就是 3 重 DES — — Triple DES. 背景 至于 3DES 为什么会出现呢?其实,这个不难想到.由于 DES 是一种非常简便的加密算法,但是密钥长度比较短,计算量比较小,相对来说,比较容易被破解.因此,在 DES 的基础上,使用三重数据加密算法,对数据进行加密,这样来说,破解的概率就小了很多. 概念 3D

9.Java 加解密技术系列之 RSA

Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项目太紧,具体的就不多说了,想听我吐槽的小伙伴, 可以私信给我(*^__^*) .上一篇文章,已经把对称加密的算法讲完了.从今天开始,要说说非对称加密了.因为,非对称加密真的是太重要了,我们的日常生活中,都离不开非对称加密. 概念 在说 RSA 之前,首先聊聊什么是非对称加密.在讲对称加密的时候,就曾

5.Java 加解密技术系列之 DES

Java 加解密技术系列之 DES 序 背景 概念 基本原理 主要流程 分组模式 代码实现 结束语 序 前 几篇文章讲的都是单向加密算法,其中涉及到了 BASE64.MD5.SHA.HMAC 等几个比较常见的加解密算法.这篇文章,以及后面几篇,打算介绍几个对称加密算法,比如:DES.3DES(TripleDES).AES 等.那么,这篇文章主要是对 DES 大概讲一下. 背景 在 讨论 DES 之前,首先了解一下什么是对称加密算法吧.对于对称加密算法,他应用的时间比较早,技术相对来说比较成熟,在

7.java 加解密技术系列之 AES

java 加解密技术系列之 AES 序 概念 原理 应用 代码实现 结束语 序 这篇文章继续介绍对称加密算法,至于今天的主角,不用说,也是个厉害的角色 — — AES.AES 的出现,就是为了来替代原先的 DES 标准.现在来说,AES 的用途还是非常广泛的. 概念 AES, 全称为“Advanced Encryption Standard”,中文名“高级加密标准”,在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准.AES 加密算法作为新一代的数据加密标准汇聚了强安

java加密解密算法位运算

一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值.效果图如下: 二.实现过程 1 package com.itxxz; 2 3 import java.util.Scanner; 4 5 /** 6 * java加密解密算法 7 * 8 * @author 螃蟹 9 * 网站:IT学习者 10 * 网址:ht