混淆编号

本文介绍了一种基于随机数的字符串加密与解密方法。通过定义两个映射表实现字符到数字及反之的转换,并利用随机数进行加密运算。此外,还提供了用于验证加密解密正确性的示例代码。

/**
 * TestRandom.java
 * create on 2007-6-11
 * Copyright 2010 MySteelSoft All Rights Reserved.
 */
package com.test;
import java.util.HashMap;

public class TestRandom {
 
 public static HashMap map=TestRandom.bb();
 public static HashMap map1=TestRandom.cc();
 public static int randomNum=randomString();
 
 public static HashMap bb(){
  HashMap tempMap=new HashMap();
  tempMap.put("A",1);tempMap.put("B",2);tempMap.put("C",3);
  tempMap.put("D",4);tempMap.put("E",5);tempMap.put("F",6);
  tempMap.put("G",7);tempMap.put("H",8);tempMap.put("I",9);
  tempMap.put("J",10);tempMap.put("K",11);tempMap.put("L",12);
  tempMap.put("M",13);tempMap.put("N",14);tempMap.put("O",15);
  tempMap.put("P",16);tempMap.put("Q",17);tempMap.put("R",18);
  tempMap.put("S",19);tempMap.put("T",20);tempMap.put("U",21);
  tempMap.put("V",22);tempMap.put("W",23);tempMap.put("X",24);
  tempMap.put("Y",25);tempMap.put("Z",26);tempMap.put("1",27);
  tempMap.put("2",28);tempMap.put("3",29);tempMap.put("4",30);
  tempMap.put("5",31);tempMap.put("6",32);tempMap.put("7",33);
  tempMap.put("8",34);tempMap.put("9",35);tempMap.put("0",36);

  tempMap.put("a",37);tempMap.put("b",38);tempMap.put("c",39);
  tempMap.put("d",40);tempMap.put("e",41);tempMap.put("f",42);
  tempMap.put("g",43);tempMap.put("h",44);tempMap.put("i",45);
  tempMap.put("j",46);tempMap.put("k",47);tempMap.put("l",48);
  tempMap.put("m",49);tempMap.put("n",50);tempMap.put("o",51);
  tempMap.put("p",52);tempMap.put("q",53);tempMap.put("r",54);
  tempMap.put("s",55);tempMap.put("t",56);tempMap.put("u",57);
  tempMap.put("v",58);tempMap.put("w",59);tempMap.put("x",60);
  tempMap.put("y",61);tempMap.put("z",62);
  return tempMap;
 }
 
 public static HashMap cc(){
  HashMap tempMap=new HashMap();
  tempMap.put(1,"A");tempMap.put(2,"B");tempMap.put(3,"C");
  tempMap.put(4,"D");tempMap.put(5,"E");tempMap.put(6,"F");
  tempMap.put(7,"G");tempMap.put(8,"H");tempMap.put(9,"I");
  tempMap.put(10,"J");tempMap.put(11,"K");tempMap.put(12,"L");
  tempMap.put(13,"M");tempMap.put(14,"N");tempMap.put(15,"O");
  tempMap.put(16,"P");tempMap.put(17,"Q");tempMap.put(18,"R");
  tempMap.put(19,"S");tempMap.put(20,"T");tempMap.put(21,"U");
  tempMap.put(22,"V");tempMap.put(23,"W");tempMap.put(24,"X");
  tempMap.put(25,"Y");tempMap.put(26,"Z");tempMap.put(27,"1");
  tempMap.put(28,"2");tempMap.put(29,"3");tempMap.put(30,"4");
  tempMap.put(31,"5");tempMap.put(32,"6");tempMap.put(33,"7");
  tempMap.put(34,"8");tempMap.put(35,"9");tempMap.put(36,"0");
  
  tempMap.put(37,"a");tempMap.put(38,"b");tempMap.put(39,"c");
  tempMap.put(40,"d");tempMap.put(41,"e");tempMap.put(42,"f");
  tempMap.put(43,"g");tempMap.put(44,"h");tempMap.put(45,"i");
  tempMap.put(46,"j");tempMap.put(47,"k");tempMap.put(48,"l");
  tempMap.put(49,"m");tempMap.put(50,"n");tempMap.put(51,"o");
  tempMap.put(52,"p");tempMap.put(53,"q");tempMap.put(54,"r");
  tempMap.put(55,"s");tempMap.put(56,"t");tempMap.put(57,"u");
  tempMap.put(58,"v");tempMap.put(59,"w");tempMap.put(60,"x");
  tempMap.put(61,"y");tempMap.put(62,"z");
  return tempMap;
 }
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  System.out.println(randomNum);
  System.out.println(TestRandom.EncryptStr("BCDE000"));
  System.out.println(TestRandom.UntieStr(TestRandom.EncryptStr("BCDE000")));
 }
 
 public static final int randomString(){
  java.util.Random r=new java.util.Random();
  int roandNumber;
   roandNumber=(r.nextInt() >>> 1) %37;
     return roandNumber==0?1:roandNumber;
 }

 public static String EncryptStr(String str){
  int totalNum;
  String tempStr = "";
   for(int i=0;i<str.length();i++){
    totalNum=(Integer)map.get(String.valueOf(str.charAt(i)))+randomNum;
    if(totalNum>62){
     totalNum=totalNum-62;
    }
    if(i==3){
     tempStr+=String.valueOf(randomNum);
    }
    if(i==4){
     tempStr+=String.valueOf(randomNum);
    }
    tempStr+=map1.get(totalNum);
   }
  return tempStr;
 }
 
 public static String UntieStr(String str){
  int totalNum;
  String tempStr="";
  String temp="";
   for(int j=0;j<str.length();j++){
    if(j==3){
     temp+=str.substring(0,3);
    }
    if(j==5){
     temp+=str.substring(temp.length()+String.valueOf(randomNum).length(),temp.length()+String.valueOf(randomNum).length()+1);
    }
    if(j==6){
     temp+=str.substring(temp.length()+(String.valueOf(randomNum).length()*2),str.length());
    }
   }
   if(temp.equals("")){
    for(int i=0;i<str.length();i++){
     totalNum=(Integer)map.get(String.valueOf(str.charAt(i)))-randomNum;
     if(totalNum<1){
      totalNum=totalNum+62;
     }
     tempStr+=map1.get(totalNum);
    }
   }else{
    for(int i=0;i<temp.length();i++){
     totalNum=(Integer)map.get(String.valueOf(temp.charAt(i)))-randomNum;
     if(totalNum<1){
      totalNum=totalNum+62;
     }
     tempStr+=map1.get(totalNum);
    }
   }
  return tempStr;
 }
 
 /**
  * 判断字符串是否是A-Z和0-9组成
  * @param s
  * @return
  */
 public static boolean isNumOrStr(String s){
    boolean isDorL=true;  
    byte[] byteStr=s.getBytes();
    for(int i=0;i<byteStr.length;i++){  
        if(!((byteStr[i]>=48&&(byteStr[i]<=57)||(byteStr[i]>=65&&byteStr[i]<=90)))){  
            isDorL=false;  
            break;  
        }  
    }  
    return isDorL;
 }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值