JAVA实现的AZDG加密-解密算法(附源程序)(lp)

JAVA实现的AZDG加密-解密算法。源程序:

import java.io.IOException;

import java.security.MessageDigest;

 

 

public class Azdg {

 

    public static void main(String[] args) {

      

       Azdg azdg = new Azdg();

       System.out.println(System.currentTimeMillis()/1000);

       String clearText = "no=sh0105&time=12319399372223`112r3r223";//明文

       String cipherText = "";//密文

       String cleanText = "";//解密后的

       String key = "1234567890";//密钥,可自定义

      

       System.out.println("明文为:" + clearText);

       cipherText = azdg.encrypt(clearText, key);

       System.out.println("加密后为:"+cipherText);

       cleanText = azdg.decrypt(cipherText, key);

       System.out.println("解密后为:"+cleanText);

    }

   

    /**

     * 加密算法

     * */

    public String encrypt(String txt, String key) {

       String encrypt_key = " 0f 9cfb 7a 9acced 8a 4167ea8006ccd098";

       int ctr = 0;

       String tmp = "";

       int i;

       for (i = 0; i < txt.length(); i++) {

           ctr = (ctr == encrypt_key.length()) ? 0 : ctr;

           tmp = tmp + encrypt_key.charAt(ctr)

                  + (char)(txt.charAt(i) ^ encrypt_key.charAt(ctr));

           ctr++;

       }

       return base64_encode(key(tmp, key));

    }

   

    /**

     * 解密算法

     */

    public String decrypt(String cipherText, String key) {

       // base64解码

       cipherText = base64_decode(cipherText);

       cipherText = key(cipherText, key);

       String tmp = "";

       for (int i = 0; i < cipherText.length(); i++) {

           int c = cipherText.charAt(i) ^ cipherText.charAt(i + 1);

           String x = "" + (char) c;

 

           tmp += x;

           i++;

       }

       return tmp;

    }

 

    public String key(String txt, String encrypt_key) {

       encrypt_key = strMD5(encrypt_key);

       int ctr = 0;

       String tmp = "";

       for (int i = 0; i < txt.length(); i++) {

           ctr = (ctr == encrypt_key.length()) ? 0 : ctr;

           int c = txt.charAt(i) ^ encrypt_key.charAt(ctr);

           String x = "" + (char) c;

           tmp = tmp + x;

           ctr++;

       }

       return tmp;

    }

 

    public String base64_encode(String str) {

       return new sun.misc.BASE64Encoder().encode(str.getBytes());

    }

   

    public String base64_decode(String str) {

       sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();

       if (str == null)

           return null;

       try {

           return new String(decoder.decodeBuffer(str));

       } catch (IOException e) {

           e.printStackTrace();

           return null;

       }

    }

 

    public static final String strMD5(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;

    }

 

}

 

运行结果:

明文为:no=sh0105&time=123193弄几个中文试试372223`112r3r223 加密后为:VWZWPl81BXMANlA2BjVTNwBuA3dSLwBrUz9XOVk0WDZRPgE1UDZRbQNuU9vNCdnsAoF0CYF2VJS+ UteHAMqrUmADP1g6AWxVOlZiX2gFMQBvUDQGdlM0ACkDY1JpADE= 解密后为:no=sh0105&time=123193弄几个中文试试372223`112r3r223

文件加密解密算法(Java源码) java,file,算法,加密解密,java源码 package com.crypto.encrypt; import java.security.SecureRandom; import java.io.*; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.Cipher; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.NoSuchPaddingException; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import java.lang.reflect.Constructor; import java.security.spec.KeySpec; import java.lang.reflect.InvocationTargetException; public class EncryptData { private String keyfile=null; public EncryptData() { } public EncryptData(String keyfile) { this.keyfile=keyfile; } /** * 加密文件 * @param filename String 源路径 * @param filenamekey String 加密后的路径 */ public void createEncryptData(String filename,String filenamekey) throws IllegalStateException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IOException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IllegalStateException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IOException { //验证keyfile if(keyfile==null || keyfile.equals("")) { throw new NullPointerException("无效的key文件路径"); } encryptData(filename,filenamekey); } /** * 加密类文件 * @param filename String 原始的类文件 * @param encryptfile String 加密后的类文件 * @throws IOException * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws NoSuchAlgorithmException * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws IllegalStateException */ private void encryptData(String filename,String encryptfile) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, IllegalStateException, ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException { byte data[]=Util.readFile(filename); // 执行加密操作 byte encryptedClassData[] = getencryptData(data); // 保存加密后的文件,覆盖原有的类文件。 Util.writeFile(encryptedClassData,encryptfile); } /** * 直接获得加密数据 * @param bytes byte[] * @throws IllegalStateException * @throws IllegalBlockSizeException * @throws BadPaddingException * @throws InvalidKeyException * @throws NoSuchPaddingException * @throws InvalidKeySpecException * @throws NoSuchAlgorithmException * @throws InstantiationException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException * @throws NoSuchMethodException * @throws SecurityException * @throws ClassNotFoundException * @throws IOException * @return byte[] */ public byte[] createEncryptData(byte[] bytes) throws IllegalStateException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IOException { bytes=getencryptData(bytes); return bytes; } private byte[] getencryptData(byte[] bytes) throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, IllegalStateException { // 产生一个可信任的随机数源 SecureRandom sr = new SecureRandom(); //从密钥文件key Filename中得到密钥数据 byte[] rawKeyData = Util.readFile(keyfile); // 从原始密钥数据创建DESKeySpec对象 Class classkeyspec=Class.forName(Util.getValue("keyspec")); Constructor constructor = classkeyspec.getConstructor(new Class[]{byte[].class}); KeySpec dks = (KeySpec) constructor.newInstance(new Object[]{rawKeyData}); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm()); SecretKey key = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(Util.getAlgorithm()); // 用密钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 执行加密操作 bytes = cipher.doFinal(bytes); // 返回字节数组 return bytes; } /** * 设置key文件路径 * @param keyfile String */ public void setKeyFile(String keyfile) { this.keyfile=keyfile; } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值