Base64加密算法


  Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。可查看RFC2045~RFC2049,上面有MIME的詳細規范。
  Base64編碼是從二進制到字符的過程,可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼具有不可讀性,需要解碼后才能閱讀。

  Java相關參考代碼如下:

 
         

import java.nio.charset.Charset;

import org.apache.commons.codec.binary.Base64;


public
class EnhancedBase64Utils { private static Charset charset = Charset.forName("utf-8"); public static String encrypt(String src) { int mask_ASCII = 0X6D; //運算掩碼 int check_ASCII = 0X9C; //校驗碼初始值 int i = 0; byte[] streamContent = new byte[ (int) src.getBytes().length + 2]; //取得文件內容 for (i = 0; i < src.getBytes().length; i++) { streamContent[i] = src.getBytes(charset)[i]; } //對文件內容進行按位運算 for (i = 0; i < streamContent.length; i++) { check_ASCII ^= streamContent[i]; //先運算校驗碼 streamContent[i] ^= mask_ASCII; //再按位與或運算 } byte[] check_asciis = new byte[2]; //System.out.print(Integer.toBinaryString(check_ASCII)); byte check_ASCIIchar = (byte) check_ASCII; String checkstr = Integer.toHexString(check_ASCIIchar); if (checkstr.length() == 1) { checkstr = "0" + checkstr; } check_asciis = checkstr.getBytes(); //添加校驗碼 streamContent[streamContent.length - 2] = check_asciis[0]; streamContent[streamContent.length - 1] = check_asciis[1]; //輸出到目標文件 return Base64.encodeBase64String(streamContent); } /** * * @param src * @return */ public static String decrypt(String src) { int mask_ASCII = 0X6D; //運算掩碼 int check_ASCII = 0X9C; //校驗碼初始值 int i = 0; byte[] streamContent = Base64.decodeBase64(src); // //對文件內容進行按位運算 for (i = 0; i < streamContent.length - 2; i++) { streamContent[i] ^= mask_ASCII; //先按位與或運算 check_ASCII ^= streamContent[i]; //再運算校驗碼 } byte[] check_asciis = new byte[2]; byte check_ASCIIchar = (byte) check_ASCII; String checkstr = Integer.toHexString(check_ASCIIchar); if (checkstr.length() == 1) { checkstr = "0" + checkstr; } check_asciis = checkstr.getBytes(); //添加校驗碼 streamContent[streamContent.length - 2] = check_asciis[0]; streamContent[streamContent.length - 1] = check_asciis[1]; if (check_asciis[0] != streamContent[streamContent.length - 2] || check_asciis[1] != streamContent[streamContent.length - 1]) { return null; } //輸出到目標文件 String dest = new String(streamContent,charset); dest = dest.substring(0, dest.length() - 2); return dest; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM