国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 128進制加密數(shù)據(jù)示例分享

128進制加密數(shù)據(jù)示例分享

2019-11-15 14:35java教程網(wǎng) JAVA教程

這篇文章主要介紹了128進制加密數(shù)據(jù)示例,這里使用JAVA實現(xiàn),需要的朋友可以參考下

128進制加密數(shù)據(jù),可以自定符號表,使用自己喜歡的符號做加密

 

復(fù)制代碼代碼如下:


?package com.wmly.enc;

 

import java.util.HashMap;

/**
 * 128進制加解密, 一個符號可表示7個bit
 * 可以自定義符號表, 符號不能重復(fù)
 */
public class MyBASE128 {

 public static final char[] symbolTable = new char[128];
 public static final HashMap<Character, Integer> indexTable = new HashMap<>(128);
 static {
  int i = 0;
  for (int j = 0; j < 128; j++) {
//   symbolTable[j] = (char) j;
   if('A' <= j && j <= 'Z'
    || 'a' <= j && j <= 'z'
    || '0' <= j && j <= '9') {
    symbolTable[i++] = (char) j;
   }
  }
  for (char c : "這是中國人寫地[備思要愛發(fā)]編解碼程序&擁有獨特的自定義符號表|不過布能使用重復(fù)字,汗啊(還差一十二個知*.#)。為我們加油吧,親!".toCharArray()) {
   symbolTable[i++] = c;
  }

  checkTable();

  for (int j = 0; j < 128; j++) {
   indexTable.put(symbolTable[j], j);
  }
 }

 private static void checkTable() throws Error {
  if(symbolTable[127] == 0) {
   throw new Error("符號表長度不正確!");
  }
  for (char a : symbolTable) {
   int count = 0;
   for (char b : symbolTable) {
    if(a == b) {
     count++;
    }
   }
   if(count > 2) {
    throw new Error("符號表有重復(fù)符號!");
   }
  }
 }

 public String encode(byte[] data) {
  if(data == null || data.length == 0) {
   return new String();
  }
  StringBuilder result = new StringBuilder();
  int tail = 0;
  for (int i = 0; i < data.length; i++) {
   int mov = (i % 7 + 1);
   int curr = 0xFF & data[i];
   int code = tail + (curr >> mov);
   result.append(symbolTable[code]);
   tail = (0xFF & (curr << (8 - mov))) >> 1;
   if(mov == 7) {
    result.append(symbolTable[tail]);
    tail = 0;
   }
  }
  result.append(symbolTable[tail]);
  return result.toString();
 }

 public byte[] decode(String base128) {
  if(base128 == null || base128.length() == 0) {
   return new byte[] { };
  }
  int length = (int) Math.floor(base128.length() * 0.875);
  byte[] result = new byte[length];
  int idx = 0;
  int head = indexTable.get(base128.charAt(0)) << 1;
  for (int i = 1; i < base128.length();) {
   int mod = i % 8;
   int code = indexTable.get(base128.charAt(i++));
   result[idx++] = (byte) (0xFF & (head + (code >> (7 - mod))));
   if(mod == 7) {
    head = 0xFF & (indexTable.get(base128.charAt(i++)) << 1);
   } else {
    head = 0xFF & (code << (mod + 1));
   }
  }
  return result;
 }

 ///////////////////////測試方法///////////////////////////////
 public static void main(String[] args) {
  MyBASE128 base128 = new MyBASE128();
  test(base128);

  String txt = "這是我的加解密測試";
  String enc = base128.encode(txt.getBytes());
  System.out.println(enc);
  System.out.println("----------------");
  System.out.println(new String(base128.decode(enc)));
 }

 private static void test(MyBASE128 base128) {
  for (int i = 0; i < 10000; i++) {
   String r = randomData();
   String d = new String(base128.decode(base128.encode(r.getBytes())));
   if(!r.equals(d)) {
//    d = new String(base128.decode(base128.encode(r.getBytes())));
    System.out.println("加解密失??!: " + r);
   }
  }
 }

 private static String randomData() {
  String textString = "了咖啡機累啊戴假發(fā)\n\r哦-";
  int start = random(0, textString.length() - 3);
  int end = random(start + 1, textString.length() - 1);
  return textString.substring(start, end);
 }

 private static int random(int i, int j) {
  return (int) Math.ceil(Math.random()*(j-i)+i);
 }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄毛片| 成年女人在线观看 | 国产黄网 | 国产麻豆乱码精品一区二区三区 | 午夜资源| 综合精品久久久 | 亚洲理论电影在线观看 | 久久国产精品久久久久久电车 | 81精品国产乱码久久久久久 | 免费黄色av| 久久亚洲精品中文字幕 | 久久精品久久久久久 | 欧美专区在线观看 | 国产性猛交xxxx免费看久久 | 农村末发育av片四区五区 | 91羞羞网站 | 亚洲天堂一区二区 | 久久久精品网站 | 精品综合久久 | 久久草在线视频 | 夜夜爽av福利精品导航 | 国产日韩欧美 | 精品一区久久 | 本道综合精品 | 久久久久久国产精品免费免费狐狸 | 黄色片网站在线 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲精品一二区 | 欧美在线综合 | 91精品国产福利在线观看 | 国产在线视频一区 | 精品视频一区二区三区在线观看 | 亚洲精品成人在线 | 精品一区欧美 | 欧美黄色一区 | 亚洲精品久久久久久久久久久 | 中文区永久区 | 午夜精品成人一区二区 | 黄色a视频 | 欧美电影免费观看网站 | 亚洲福利一区二区 |