文档章节

加密工具

yabushan
 yabushan
发布于 2016/04/16 15:01
字数 2198
阅读 12
收藏 1
点赞 1
评论 0

1.PBE加密

package yabushan.password;

import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

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

public class PBE {

	private static String src="美女";
	
	private static byte[] salt={-29,100,93,104,-23,-25,33,34};
	
	private static String password="sanyuepwd";
	public static void main(String[] args) throws Exception {
		//bcPBE();
	for(int i=0; i<10;i++){
		String target=encrypt(src+i);
		
		decrypt(target);
	}
		
	}
	
	public static void bcPBE() throws Exception{
		
		//初始化盐
		//SecureRandom random=new SecureRandom();
	//	byte[] salt=random.generateSeed(8);
		byte[] salt={-29,100,93,104,-23,-25,33,34};
		for(int i=0;i<salt.length;i++){
			System.out.println(salt[i]+">>>");
		}
		System.out.println(Base64.encodeBase64String(salt));
		//口令与秘钥
	
		
		try {
			String password="mypass";
			PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
			Key key=factory.generateSecret(pbeKeySpec);
			
			//加密
			
			PBEParameterSpec parameterSpec=new PBEParameterSpec(salt, 100);//100是指迭代次数
			Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
			cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
			byte[] result=cipher.doFinal(src.getBytes());
			System.out.println("jdk pbe encrypt:"+Base64.encodeBase64String(result));
		
			
			//解密
			cipher.init(Cipher.DECRYPT_MODE, key,parameterSpec);
			result=cipher.doFinal(result);
			System.out.println("jdk pbe decrypt:"+new String(result));
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	//加密
	
	public static String encrypt(String src){
		try {
			PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
			Key key=factory.generateSecret(pbeKeySpec);
			
			
			
			PBEParameterSpec parameterSpec=new PBEParameterSpec(salt, 100);//100是指迭代次数
			Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
			cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
			byte[] result=cipher.doFinal(src.getBytes());
			System.out.println("jdk pbe encrypt:"+Base64.encodeBase64String(result));
			return Base64.encodeBase64String(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}
	//解密
	public static String decrypt(String target){
		try {
			PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
			Key key=factory.generateSecret(pbeKeySpec);
			
			
			PBEParameterSpec parameterSpec=new PBEParameterSpec(salt, 100);//100是指迭代次数
			byte[] result=Base64.decodeBase64(target);
			Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
			cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
			//解密
			cipher.init(Cipher.DECRYPT_MODE, key,parameterSpec);
			result=cipher.doFinal(result);
			System.out.println("jdk pbe decrypt:"+new String(result));
			return new String(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	
}

2.对称加解密

package yabushan.password;

import java.io.ByteArrayOutputStream;
import java.security.Security;

import javax.crypto.Cipher; 
import javax.crypto.SecretKey;  
import javax.crypto.spec.SecretKeySpec;
/**
 * 对称加密
 * <code>{@link ThreeDes}</code>
 *
 * TODO : document me
 *
 * @author yabushan
 */
public class ThreeDes {
	
	private static final String Algorithm = "TripleDES";
	
	public static byte[] ecrypt(byte[] keybyte, byte[] source){
		try {            
			//生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
			//加密           
			Cipher c1 = Cipher.getInstance("TripleDES/ECB/PKCS5Padding");
			c1.init(Cipher.ENCRYPT_MODE, deskey);
			return c1.doFinal(source);        
		} catch (java.security.NoSuchAlgorithmException e1) {
			e1.printStackTrace();        
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();        
		} catch (java.lang.Exception e3) {
			e3.printStackTrace();        
		}
		return null;
	}
	
	public static byte[] decrypt(byte[] keybyte, byte[] source)throws Exception{
		try {
			//生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte,Algorithm);
			//解密           
			Cipher c1 = Cipher.getInstance("TripleDES/ECB/PKCS5Padding");
			c1.init(Cipher.DECRYPT_MODE, deskey);
			return c1.doFinal(source);        
		} catch (java.security.NoSuchAlgorithmException e1) {
			e1.printStackTrace();        
			throw e1;
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();
			throw e2;
		} catch (java.lang.Exception e3) {    
			e3.printStackTrace();
			throw e3;
		}
	}
	
    public static byte[] hexStringToBytes(String in) {  
    	byte[] arrB = in.getBytes();  
    	int iLen = arrB.length;  
    	// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2   
    	byte[] arrOut = new byte[iLen / 2];  
    	for (int i = 0; i < iLen; i = i + 2) {  
    		String strTmp = new String(arrB, i, 2);  
    		arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);  
    	}  
    	return arrOut;  
    }
    
    public static byte[] decode(String bytes) 

    { 

	    ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2); 
	
	    //将每2位16进制整数组装成一个字节 
	
	    String hexString="0123456789ABCDEF"; 
	
	    for(int i=0;i<bytes.length();i+=2){
	    	 baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
	    }
	    return baos.toByteArray(); 
    }
    
    public static byte[] decode2(String hexString) throws Exception{
    	byte[] bts = new byte[hexString.length()/2];
    	for (int i = 0; i < bts.length; i++) {
			bts[i] = (byte)Integer.parseInt(hexString.substring(2*i, 2*i+2),16);
		}
    	return bts;
    }

    public static String byte2hex(byte[] b) {
        String hs="";
        String stmp="";
        for (int n=0;n<b.length;n++){
          stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
          if (stmp.length()==1)
            hs=hs+"0"+stmp;
          else hs=hs+stmp;
            if (n<b.length-1)  hs=hs+"";
          }
        return hs.toUpperCase();
      }
    
    public static void main(String[] args) throws Exception {
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		String authenticator = "69556765$2F8997E4234BFDDD9B6557E8$8002002601147666$001001990070114000034C09B4BE1B65$192.168.1.104$4C:09:B4:BE:1B:65$990070|$CTC";
//		byte[] source = decode(authenticator);
		//byte[] source = authenticator.getBytes();
		String userID = "1234567";
		int lenth = userID.length();
		for (int i = 0; i < 24-lenth; i++) {
			userID = userID+"0";
		}
		System.out.println("userID:"+userID);
		byte[] keybyte = userID.getBytes();
		
		System.out.println("keybyte="+new String(keybyte)+"--length:"+keybyte.length);
		
		
		byte[] source = authenticator.getBytes();
		
		/**
		 * 加密
		 */
		byte[] data3 = ecrypt(keybyte, source);
		String data = byte2hex(data3);
		System.out.println("密文:"+data+"--length:"+data.length());
		/**
		 * 解密
		 */
		source =decode(data);
		byte[] data2 = decrypt(keybyte, source);
		
		System.out.println("data2:"+data2);
		
		String realData = new String(data2);
//		String realData = "12639364$ 3DE1B6ED6EDD0C47AB6F013CADF0309E$11111111$001001990070114000034C09B4BE1B65$192.168.200.70$4C:09:B4:BE:1B:65$990070|$CTC";
		System.out.println("明文:"+realData+"---"+realData.indexOf("$"));
		String[] dataStr = realData.split("\\$");
		System.out.println(dataStr.length+"--"+dataStr[0]);
		String stbid = dataStr[3];
		String stbip = dataStr[4];
		String mac = dataStr[5];
		
		System.out.println("STBID = " + stbid);
		System.out.println("IP = " + stbip);
		System.out.println("MAC = " + mac);
    	
	}
}

3.MD5加密

package yabushan.password;

import java.security.MessageDigest;

public class MD5Util {
    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[] btInput = s.getBytes();
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(btInput);
            // 获得密文
            byte[] md = mdInst.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;
        }
    }

    public static void main(String[] args) {
        System.out.println(MD5Util.MD5("a123456"+"ease.shopping"));
       //System.out.println(MD5Util.MD5("加密"));
    }
}

4.3DES加解密

package yabushan.password;

import java.io.UnsupportedEncodingException;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/*字符串 DESede(3DES) 加密
 * ECB模式/使用PKCS7方式填充不足位,目前给的密钥是192位
 * 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的
 * 加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加
 * 密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的
 * 密钥,P代表明文,C代表密表,这样,
 * 3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
 * 3DES解密过程为:P=Dk1((EK2(Dk3(C)))
 * */
public class DesUtils {

	/**
	 * @param args在java中调用sun公司提供的3DES加密解密算法时
	 *            ,需要使 用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: jce.jar
	 *            security/US_export_policy.jar security/local_policy.jar
	 *            ext/sunjce_provider.jar
	 */
	

	private static final String Algorithm = "DESede"; // 定义加密算法,可用
														// DES,DESede,Blowfish

	// keybyte为加密密钥,长度为24字节
	// src为被加密的数据缓冲区(源)
	public static byte[] encryptMode(byte[] keybyte, byte[] src) {
		try {
			// 生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
			// 加密
			Cipher c1 = Cipher.getInstance(Algorithm);
			c1.init(Cipher.ENCRYPT_MODE, deskey);
			return c1.doFinal(src);// 在单一方面的加密或解密
		} catch (java.security.NoSuchAlgorithmException e1) {
			// TODO: handle exception
			e1.printStackTrace();
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();
		} catch (java.lang.Exception e3) {
			e3.printStackTrace();
		}
		return null;
	}

	// keybyte为加密密钥,长度为24字节
	// src为加密后的缓冲区
	public static byte[] decryptMode(byte[] keybyte, byte[] src) {
		try {
			// 生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
			// 解密
			Cipher c1 = Cipher.getInstance(Algorithm);
			c1.init(Cipher.DECRYPT_MODE, deskey);
			return c1.doFinal(src);
		} catch (java.security.NoSuchAlgorithmException e1) {
			// TODO: handle exception
			e1.printStackTrace();
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();
		} catch (java.lang.Exception e3) {
			e3.printStackTrace();
		}
		return null;
	}

	// 转换成十六进制字符串
	public static String byte2Hex(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1) {
				hs = hs + "0" + stmp;
			} else {
				hs = hs + stmp;
			}
			if (n < b.length - 1)
				hs = hs + ":";
		}
		return hs.toUpperCase();
	}

	public static String getCharEncode(String str) {

		String charEncode = "GB2312";
		try {
			if (str.equals(new String(str.getBytes(charEncode), charEncode))) {

				return charEncode;
			}
		} catch (UnsupportedEncodingException e) {

		}

		charEncode = "GBK";
		try {
			if (str.equals(new String(str.getBytes(charEncode), charEncode))) {

				return charEncode;
			}
		} catch (UnsupportedEncodingException e) {

		}

		charEncode = "ISO-8859-1";
		try {
			if (str.equals(new String(str.getBytes(charEncode), charEncode))) {

				return charEncode;
			}
		} catch (UnsupportedEncodingException e) {

		}

		charEncode = "UTF-8";
		try {
			if (str.equals(new String(str.getBytes(charEncode), charEncode))) {

				return charEncode;
			}
		} catch (UnsupportedEncodingException e) {

		}

		return "";

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 添加新安全算法,如果用JCE就要把它添加进去
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		final byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x50,
				0x40, 0x38, 0x18, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD,
				0x55, 0x66, 0x27, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x38,
				(byte) 0xE2 }; // 24字节的密钥
		// final byte[] keyBytes = "123456".getBytes();
		String szSrc = "123456789012345";
		System.out.println("加密前的字符串:" + szSrc);
		byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
		System.out.println("加密后的字符串:" + new String(encoded));
	//	System.out.println("加密后的编码:" + getCharEncode(new String(encoded)));
		byte[] srcBytes = decryptMode(keyBytes, encoded);
		System.out.println("解密后的字符串:" + (new String(srcBytes)));
		
	/*	byte[] test=encoderStr("123456789");
		System.out.println("加密后:"+new String(test));*/
		
		/*String test2=decoderStr(test);
		System.out.print(test2);
		String string=new String(test);
		System.out.print(decoderStr(string.getBytes()));*/
	}
	
	
	//加密
	public static  byte[] encoderStr(String src){
	final  byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x50,
			0x40, 0x38, 0x18, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD,
			0x55, 0x66, 0x27, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x38,
			(byte) 0xE2 }; // 24字节的密钥
		
		byte[] encoded = encryptMode(keyBytes, src.getBytes());
		return encoded;
	}
	

	
	//解密
	public static  String decoderStr(byte[] target){
		final byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x50,
			0x40, 0x38, 0x18, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD,
			0x55, 0x66, 0x27, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x38,
			(byte) 0xE2 }; // 24字节的密钥
		byte[] srcBytes = decryptMode(keyBytes, target);
		return new String(srcBytes);
	}
	
}

5.基础加密组件

package yabushan.password;

import java.security.MessageDigest;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import com.cloopen.rest.sdk.utils.encoder.BASE64Decoder;
import com.cloopen.rest.sdk.utils.encoder.BASE64Encoder;


/**
 * 基础加密组件
 * <code>{@link Coder}</code>
 *
 * TODO : document me
 *
 * @author yabushan
 */
public abstract class Coder {
	public static final String KEY_SHA = "SHA";
	public static final String KEY_MD5 = "MD5";

	/**
	 * MAC算法可选以下多种算法
	 * 
	 * <pre>
	 * HmacMD5 
	 * HmacSHA1 
	 * HmacSHA256 
	 * HmacSHA384 
	 * HmacSHA512
	 * </pre>
	 */
	public static final String KEY_MAC = "HmacMD5";

	/**
	 * BASE64解密
	 * 
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static byte[] decryptBASE64(String key) throws Exception {
		return (new BASE64Decoder()).decodeBuffer(key);
	}

	/**
	 * BASE64加密
	 * 
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static String encryptBASE64(byte[] key) throws Exception {
		return (new BASE64Encoder()).encodeBuffer(key);
	}

	/**
	 * MD5加密
	 * 
	 * @param data
	 * @return
	 * @throws Exception
	 */
	public static byte[] encryptMD5(byte[] data) throws Exception {

		MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
		md5.update(data);

		return md5.digest();

	}

	/**
	 * SHA加密
	 * 
	 * @param data
	 * @return
	 * @throws Exception
	 */
	public static byte[] encryptSHA(byte[] data) throws Exception {

		MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
		sha.update(data);

		return sha.digest();

	}

	/**
	 * 初始化HMAC密钥
	 * 
	 * @return
	 * @throws Exception
	 */
	public static String initMacKey() throws Exception {
		KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);

		SecretKey secretKey = keyGenerator.generateKey();
		return encryptBASE64(secretKey.getEncoded());
	}

	/**
	 * HMAC加密
	 * 
	 * @param data
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static byte[] encryptHMAC(byte[] data, String key) throws Exception {

		SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
		Mac mac = Mac.getInstance(secretKey.getAlgorithm());
		mac.init(secretKey);

		return mac.doFinal(data);

	}
}
package yabushan.password;

import java.math.BigInteger;



/**
 * 
 * <code>{@link CoderTest}</code>
 *
 * TODO : document me
 *
 * @author yabushan
 */
public class CoderTest {


	public static void main(String[] args) throws Exception {
		
	
		String inputStr = "简单加密";
		

		byte[] inputData = inputStr.getBytes();
		String code = Coder.encryptBASE64(inputData);
		System.out.println("BASE64加密后:\n" + code);

		byte[] output = Coder.decryptBASE64(code);

		String outputStr = new String(output);

		System.err.println("BASE64解密后:\n" + outputStr);
		// 验证BASE64加密解密一致性
				assertEquals(inputStr, outputStr);

				// 验证MD5对于同一内容加密是否一致
				assertArrayEquals(Coder.encryptMD5(inputData), Coder
						.encryptMD5(inputData));

				// 验证SHA对于同一内容加密是否一致
				assertArrayEquals(Coder.encryptSHA(inputData), Coder
						.encryptSHA(inputData));

				String key = Coder.initMacKey();
				System.err.println("Mac密钥:\n" + key);

				// 验证HMAC对于同一内容,同一密钥加密是否一致
				assertArrayEquals(Coder.encryptHMAC(inputData, key), Coder.encryptHMAC(
						inputData, key));

				BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData));
				System.err.println("MD5:\n" + md5.toString(16));

				BigInteger sha = new BigInteger(Coder.encryptSHA(inputData));
				System.err.println("SHA:\n" + sha.toString(32));

				BigInteger mac = new BigInteger(Coder.encryptHMAC(inputData, inputStr));
				System.err.println("HMAC:\n" + mac.toString(16));
		
	}

	private static void assertEquals(String inputStr, String outputStr) {
	System.out.println(inputStr==outputStr);
		
	}

	private static void assertArrayEquals(byte[] encryptHMAC, byte[] encryptHMAC2) {
		System.out.println(encryptHMAC==encryptHMAC2);
		
	}
}


© 著作权归作者所有

共有 人打赏支持
yabushan
粉丝 1
博文 37
码字总数 34355
作品 0
基于 AES 256-bit 算法的加密/解密文件工具 - AESxWin

AESxWin 是一个基于强大的加密算法 AES 256-bit 的加密/解密文件工具,使用 C# 编程语言编写。可以使用此工具一次加密多个文件,以将其安全地备份到云服务上。 AESxWin 使用了名为 AES Cryp...

匿名 ⋅ 2017/12/03 ⋅ 0

shiro 加密登录 密码加盐处理

密码加密登录是为了提高系统安全性,即使是管理员查看数据库也得不到密码 使用shiro可以很轻松的完成加密及登录操作 1:加密工具 此工具用于注册时对密码进行加密 public static final Stri...

jaffreyen ⋅ 05/10 ⋅ 0

Java加密包--Jasypt

Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。Jasypt开发团队推出...

匿名 ⋅ 2009/06/17 ⋅ 0

AOPR能破解N种加密类型?

Office文档密码有多种加密类型,由弱到强满足不同的用户需求。本文将以WPS文档为例,讲解Word文档到底有哪些加密类型以及Word密码破解工具能否破解这些加密类型下设置的Word文档密码。   选...

neluzyy1 ⋅ 2016/02/01 ⋅ 0

使用 OpenSSL 对文件进行加密和解密

我们在平时的 Linux 运维管理的时候,经常会进行各种数据备份任务。将数据导出然后打包。通常在安全性要求比较高的环境下,我们可以借助 OpenSSL 工具对打包后的数据进行加密,这样能进一步的...

羊驼君 ⋅ 2016/11/17 ⋅ 1

给你的登录功能加点“盐”

我们登录很多网站的时候,提交瞬间,会看到密码框里的密码的比原来长很多。如果你用工具抓下来这个http请求,会发现提交给服务器的密码不是你输入的原文,而是经过某种转换后的字符串。这个做...

彭坤 ⋅ 2013/08/08 ⋅ 2

保护我的文件:Windows Bitlocker+虚拟硬盘VHD

我之前一直使用的TrueCrypt作为我的加密工具,后来升级到Window 10后,我改用了Windows自带的BitLocker作为我的加密工具,优点: 系统自带,不用安装额外的工具 和虚拟硬盘结合,加密整个驱动...

yaotingxi ⋅ 2015/10/14 ⋅ 0

如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密

如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密 姜糖水2015-04-26274 阅读 c#vb源代码加密 前言 VS开发的源代码安全性,是很多开发者头痛的事情.于是保护好源代码便成了开发者们最关心...

姜糖水 ⋅ 2015/04/26 ⋅ 0

uikoo9/jfinalQ-encrypt

注意 gitosc停止更新,转移到github:https://github.com/uikoo9/jfinalQ-encrypt jfinalQ-encrypt jfinalQ加密部署工具 支持对tomcat部署加密 目前支持非spring项目 jfinalQ 基于jfinal2.0...

uikoo9 ⋅ 2015/02/05 ⋅ 0

安卓反编译揭秘,伪加密APK文件如何被破坏

源码混淆 如上图,对Android APP的源码进行混淆后混淆器将代码中的所有变量、函数、类的名称加密为简短的英文字母代号,在APP被破解后增加破解者对代码的阅读难度。 但是混淆的功效只能运作在...

科技创造 ⋅ 2014/09/05 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部