xlaohe1 发表于 2013-2-3 10:31:13

Base64位java加密算法

package mains;import java.util.ArrayList;import java.util.List;import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream;import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream;import sun.misc.BASE64Encoder;/*** * Base64位加密算法. * @author Administrator xlaohe1 * */public class Base64Test {/*Base64 使用US-ASCII子集的64个字符,即大小写的26个英文字母,0-9,+,/。编码总是基于3个字符,每个字符用8位二进制表示,因此一共24位,再分为4四组,每组6位,表示一个Base64的值。Base64值为0就是A,为27的就是b。这样,每3个字符产生4位的Base64字符。如果被加密的字符串每3个一组,还剩1或2个字符,使用特殊字符"="补齐Base64的4字。 */private final static String BASE64ARR[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P","Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f","g", "h", "i","j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v","w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"};/** * 开始加密 * @author Administrator xlaohe1 ** @param enterStr 传入密码字符串 * @return 返回字符串的ascii码的二进制码 */private static String begin(String enterStr) {//String enterStr = "me";String ret = "";char[] cs = enterStr.toCharArray();for(char c : cs) {str = "";int i = c;//System.out.println(i);tenToTwo(i);ret += reverseCharacter(str);}System.out.println("beginRET:"+ret);return ret;}/** * 得到一个数字的二进制 * @author Administrator xlaohe1 ** @param i 十进制数字 */private static void tenToTwo(int i) {if(i == 0){//System.out.println("0");str += "0";}else if(i % 2 == 0){//System.out.println("0");str += "0";i = i / 2;tenToTwo(i);} else if(i % 2 == 1) {//System.out.println("1");str += "1";i = i / 2;tenToTwo(i);}}/** * 用来保存一个数字的二进制字符串 */private static String str="";public static void main(String args[]) throws Exception {//begin();//begin("123456");// http://zh.wikipedia.org/wiki/Base64wiki百科介绍base64里面案例的一段话String s = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";splitCharacter(begin(s));String results = "";for(String se : set) {//System.out.println(se);//System.out.println(se + "----" + Integer.valueOf(se, 2));System.out.println("BASE64:" + BASE64ARR);results += BASE64ARR;}// 不足处用=号if(results.length() % 4 == 3)results += "=";if(results.length() % 4 == 2)results += "==";if(results.length() % 4 == 1)results += "===";System.out.println(results);// 本实例输出结果//TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=// wiki百科加密后的base64字符//TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=}/** * 字符串倒序输出 * @author Administrator xlaohe1 ** @param str 要倒序的字符串 * @return 倒序后的字符串 */private static String reverseCharacter(String str) {String ret = "";for (int i = 1; i <= str.length(); i++)ret += str.substring(str.length() - i).substring(0, 1);if(ret.length() < 8) { // base64是按8bit的,所以,不足补足for(int i = 0; i < 8 - ret.length(); i ++ ) {ret = "0" + ret;}}System.out.println("ret:"+ret);return ret;}//private static Set<String> set = new HashSet<String>();/** * 用来存储密码字符的二进制字符,按6为分割,不足6为以0补足 */private static List<String> set = new ArrayList<String>();/** * 把一个字符串按没6位分割 * @author Administrator xlaohe1 ** @param str 要分割的字符串 */private static void splitCharacter(String str) {int len = str.length();if(len < 6) {for(int i = 0; i < 6 - len; i ++) str += "0";set.add(str);} else {set.add(str.substring(0, 6));str = str.substring(6);if(str.length() != 0)splitCharacter(str);}}}
页: [1]
查看完整版本: Base64位java加密算法