征集数据加密的方式
征集数据加密的方式,本人现在还没有用过数据加密,请问一下,现在都有哪些加密方式?提供详细资料和例子!
[解决办法]
MD5加密
import java.security.MessageDigest;public class MD5_1 { public final static String MD5(String s){ char hexDigits[]={ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; try{ byte[] strTemp=s.getBytes(); MessageDigest mdTemp=MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); byte[] md=mdTemp.digest(); int j=md.length; char str[]=new char[j*2]; int k=0; for(int i=0;i<j;i++){ byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); }catch(Exception e){ e.printStackTrace(); return null; } }
[解决办法]
import java.util.HashMap;import java.util.Map;public class Ecrypt { public static int fgetps(String str) { Map s = new HashMap(); s.put("0", "124"); s.put("1", "99"); s.put("2", "75"); s.put("3", "65"); s.put("4", "445"); s.put("5", "367"); s.put("6", "313"); s.put("7", "271"); s.put("8", "239"); s.put("9", "211"); s.put("a", "183 "); s.put("b", "1115"); s.put("c", "1135"); s.put("d", "1157"); s.put("e", "1177"); s.put("f", "1505"); s.put("g", "1211"); s.put("h", "1321"); s.put("i", "1471"); s.put("j", "1110"); s.put("k", "1347"); s.put("l", "1112"); s.put("m", "1113"); s.put("n", "1114"); s.put("o", "1361"); s.put("p", "1116"); s.put("q", "1309"); s.put("r", "1347"); s.put("s", "1119"); s.put("t", "1389"); s.put("u", "1405"); s.put("v", "1425"); s.put("w", "1467"); s.put("x", "1219"); s.put("y", "1187"); s.put("z", "1151"); s.put("A", "83 "); s.put("B", "115"); s.put("C", "135"); s.put("D", "157"); s.put("E", "177"); s.put("F", "505"); s.put("G", "211"); s.put("H", "321"); s.put("I", "471"); s.put("J", "110"); s.put("K", "347"); s.put("L", "112"); s.put("M", "113"); s.put("N", "114"); s.put("O", "361"); s.put("P", "116"); s.put("Q", "309"); s.put("R", "347"); s.put("S", "119"); s.put("T", "389"); s.put("U", "405"); s.put("V", "425"); s.put("W", "467"); s.put("X", "219"); s.put("Y", "187"); s.put("Z", "151"); s.put("~", "431"); s.put("!", "363"); s.put("@", "397"); s.put("#", "331"); s.put("$", "293"); s.put("%", "251"); s.put("^", "239"); s.put("&", "223"); s.put("*", "189"); s.put("(", "165"); s.put(")", "153"); s.put("-", "142"); s.put("+", "609"); s.put("|", "577"); s.put("\\", "547"); s.put("/", "511"); s.put("*", "493"); s.put(".", "327"); s.put(",", "285"); s.put(";", "267"); s.put("{", "251"); s.put("}", "223"); s.put("[", "122"); s.put("]", "634"); if (str == null) str = ""; String str1 = str.trim(); int max = str1.length(); int password = 0; String str2 = ""; String str3 = ""; for (int i = 0; i < max; i++) { str2 = str1.substring(i, i + 1); str3 = (String) s.get(str2); if (str3 != null) password += Integer.parseInt(str3); } return password; }
[解决办法]
package netcom.MD5;
import java.security.*;
import java.security.spec.*;
import java.math.*;
public class MD5{
char hexChars[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
public String convert32(String s){
try{
byte[] bytes=s.getBytes();
MessageDigest md=MessageDigest.getInstance("MD5");
md.update(bytes);
bytes=md.digest();
int j=bytes.length;
char[] chars=new char[j*2];
int k=0;
for(int i=0;i<bytes.length;i++){
byte b=bytes[i];
chars[k++]=hexChars[b>>>4&0xf];
chars[k++]=hexChars[b&0xf];
}
return new String(chars);
}
catch(Exception e){
return null;
}
}
public String convert16(String s){
String ns=convert32(s).substring(8,24);
return ns;
}
}
这种方法是加密成16位数字+字母组合。
package netcom.MD5;
import java.security.MessageDigest;
public class KL{
//可逆的加密算法
public static String jiami(String inStr){
//String s = new String(inStr);
char[] a = inStr.toCharArray();
for (int i = 0;i <a.length;i++) {
a[i] = (char)(a[i]^'~');
}
String s=new String(a);
return s;
}
public static String jiemi(String inStr){
char[] a=inStr.toCharArray();
for (int i = 0;i <a.length;i++) {
a[i]= (char)(a[i]^'~');
}
String k=new String(a);
return k;
}
}
[解决办法]
package com.winnet.encrypt;/** * 数据加密类 支持SHA-1,SHA-2(SHA-256,SHA-384,SHA-512),MD2,MD5 是对java自带加密算法的二次封装 */import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class Encrypt{ public Encrypt() { } /** * MD2加密算法 * * @param plantText * 需要加密的字符串 * @return String型 加密后的字符串 */ public String GetMD2EncString(String plantText) { return this.GetEncString(plantText, "MD2"); } /** * MD5加密算法 * * @param plantText * 需要加密的字符串 * @return String型 加密后的字符串 */ public String GetMD5EncString(String plantText) { return this.GetEncString(plantText, "MD5"); } /** * SHA-1加密算法 * * @param plantText * 需要加密的字符串 * @return String型 加密后的字符串 */ public String GetSHA1EncString(String plantText) { return this.GetEncString(plantText, "SHA-1"); } /** * SHA-256加密算法 * * @param plantText * 需要加密的字符串 * @return String型 加密后的字符串 */ public String GetSHA256EncString(String plantText) { return this.GetEncString(plantText, "SHA-256"); } /** * SHA-384加密算法 * * @param plantText * 需要加密的字符串 * @return String型 加密后的字符串 */ public String GetSHA384EncString(String plantText) { return this.GetEncString(plantText, "SHA-384"); } /** * SHA-512加密算法 * * @param plantText * 需要加密的字符串 * @return String型 加密后的字符串 */ public String GetSHA512EncString(String plantText) { return this.GetEncString(plantText, "SHA-512"); } /** * 数据加密算法 * * @param plainText * 加密字符串 * @param algorithm * 加密算法,支持SHA-1,SHA-2(SHA-256,SHA-384,SHA-512),MD2,MD5 * @return 加密结果 */ private String GetEncString(String plainText, String algorithm) { try { MessageDigest md = MessageDigest.getInstance(algorithm); md.update(plainText.getBytes()); byte[] b = md.digest(); StringBuilder output = new StringBuilder(32); for (int i = 0; i < b.length; i++) { String temp = Integer.toHexString(b[i] & 0xff); if (temp.length() < 2) { output.append("0");// 不足两位,补0 } output.append(temp); } return output.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } /* * 另外一种方法 //private final char[] HEXCHAR_LOWERCASE = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; //private * final char[] HEXCHAR_UPPERCASE = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; private String * getDigest(String plainText, String algorithm,String stringcase) throws Exception { MessageDigest md5 = MessageDigest.getInstance(algorithm); * md5.update(plainText.getBytes()); return toHexString(md5.digest(),stringcase); } * * private String toHexString(byte[] b,String stringcase) { StringBuilder sb = new StringBuilder(b.length * 2); * if(stringcase.toLowerCase().equals("lower")) { for (int i = 0; i < b.length; i++) { sb.append(HEXCHAR_LOWERCASE[(b[i] & 0xf0) >>> 4]); * sb.append(HEXCHAR_LOWERCASE[b[i] & 0x0f]); } } else if(stringcase.toLowerCase().equals("upper")) { for (int i = 0; i < b.length; i++) { * sb.append(HEXCHAR_UPPERCASE[(b[i] & 0xf0) >>> 4]); sb.append(HEXCHAR_UPPERCASE[b[i] & 0x0f]); } } return sb.toString(); } */}
[解决办法]
1, 对称加密可以选择DES, 优点是速度快, 很纯粹很有节奏的加密过程,其算法规整简明, 容易实现. 而且自己扩展也很容易.
2, 非对称的可以选择RSA, 优点是数学根基严密, 推导过程很清晰明了. 但是算法较复杂. 可以搞得很烂, 也可以写到很牛B. 难点在于大整数除法和模幂运算.从烂到精也就是从SB到牛B的过程. 缺点是即使写得很牛B, 速度还是赶不上对称加密快.
[解决办法]