对称加密

package 对称加密;

import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

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

public class AES {

    private static String src="imooc";
    public static void main(String[] args) {
        jdkAES();
    }
    public static void jdkAES(){
        //生成密钥
        try {

            KeyGenerator keyGenerator =KeyGenerator.getInstance("AES");
            keyGenerator.init(new SecureRandom());
            SecretKey secretKey=keyGenerator.generateKey();
            System.out.println("编码格式"+secretKey.getFormat());
            byte[] keyBytes=secretKey.getEncoded();


            //key转换
            Key key=new SecretKeySpec(keyBytes,"AES");



            //加密
            /**
             * 初始化cipher
             * 调用cipher的doFinal()方法生成字符数组形式的密文
             */
            Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] result=cipher.doFinal(src.getBytes());
            //result 变十六进制
            System.out.println(byteHexStr(result));

            //解密
            //密钥++密文
            cipher.init(Cipher.DECRYPT_MODE, key);
            result=cipher.doFinal(result);
            //result变成字符串
            System.out.println("jdkAES:  "+new String(result));




        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }






    }

     public static String byteHexStr(byte[] b) {
            String stmp = "";
            StringBuilder sb = new StringBuilder("");
            for (int n = 0; n < b.length; n++) {
              stmp = Integer.toHexString(b[n] & 0xFF);
              sb.append((stmp.length() == 1) ? "0" + stmp : stmp);
            }
            return sb.toString().toUpperCase().trim();
          }



}

package 对称加密;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Provider;
import java.security.Security;
import java.security.spec.InvalidKeySpecException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

/**
 * 
 * 明文 密钥+算法 密文 密钥是如何来的???
 * 
 * 
 * @author idea
 * 
 */

public class DES {
    private static String src = "imooc";

    // 明文
    public static void main(String[] args) {
        try {
            jdkDES();
        } catch (InvalidKeyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void bcDES() throws InvalidKeyException,
            NoSuchAlgorithmException, InvalidKeySpecException,
            NoSuchPaddingException, IllegalBlockSizeException,
            BadPaddingException, NoSuchProviderException {

        //添加实现方
        //Security.addProvider(new Provider());


        // 生成密钥
        // 初始化(对称)密钥生成器
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC");//这一点与jdk不同
        keyGenerator.init(56);
        // ===生成密钥并编码,使用字节数组接受
        SecretKey secretKey = keyGenerator.generateKey();
        byte[] byteKey = secretKey.getEncoded();

        // 密钥转换
        DESKeySpec desKeySpec = new DESKeySpec(byteKey);
        SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
        Key convertSecretKey = factory.generateSecret(desKeySpec);

        // 加密
        // result是密文
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
        byte[] result = cipher.doFinal(src.getBytes());
        System.out.println(byteHexStr(result));

        // 解密
        // 把cipher初始化解密码 
        // converSecretKey是密钥
        // 形参result是密文,返回结果是byte[]

        cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
        result = cipher.doFinal(result);
        System.out.println(new String(result));

    }

    public static void jdkDES() throws InvalidKeyException,
    NoSuchAlgorithmException, InvalidKeySpecException,
    NoSuchPaddingException, IllegalBlockSizeException,
    BadPaddingException {

// 生成密钥
// 初始化(对称)密钥生成器
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
// ===生成密钥并编码,使用字节数组接受
SecretKey secretKey = keyGenerator.generateKey();
byte[] byteKey = secretKey.getEncoded();

// 密钥转换
DESKeySpec desKeySpec = new DESKeySpec(byteKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
Key convertSecretKey = factory.generateSecret(desKeySpec);

// 加密
// result是密文
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println(byteHexStr(result));

// 解密
// 把cipher初始化解密码 
// converSecretKey是密钥
// 形参result是密文,返回结果是byte[]

cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
result = cipher.doFinal(result);
System.out.println(new String(result));

}




    /**
     * 
     * 字节数组按照16进制转为字符串
     * @param b
     * @return
     */
     public static String byteHexStr(byte[] b) {
            String stmp = "";
            StringBuilder sb = new StringBuilder("");
            for (int n = 0; n < b.length; n++) {
              stmp = Integer.toHexString(b[n] & 0xFF);
              sb.append((stmp.length() == 1) ? "0" + stmp : stmp);
            }
            return sb.toString().toUpperCase().trim();
          }



}

package 对称加密;

import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

public class PBE {
    private static String src = "imooc";

    public static void main(String[] args) {
        jdkPBE();
    }

    private static void jdkPBE() {
        // 初始化盐
        SecureRandom random = new SecureRandom();
        byte[] salt = random.generateSeed(8);
        // 口令和密钥
        String password = "imooc";
        PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
        SecretKeyFactory factory;
        try {
            factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
            // 工厂生产密钥需要告诉规范,就是pbeKeySpec
            Key key = factory.generateSecret(pbeKeySpec);
            // 加密
            PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 100);// 100???
            Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
            cipher.init(Cipher.ENCRYPT_MODE, key, pbeParameterSpec);
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println(byteHexStr(result));
            // 解密
            cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
            result = cipher.doFinal(result);
            System.out.println(new String(result));

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static String byteHexStr(byte[] b) {
        String stmp = "";
        StringBuilder sb = new StringBuilder("");
        for (int n = 0; n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0xFF);
            sb.append((stmp.length() == 1) ? "0" + stmp : stmp);
        }
        return sb.toString().toUpperCase().trim();
    }

}

package 对称加密;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;

public class ThreeDES {
    private static String src = "imooc";
    public static void main(String[] args) {
        try {
            jdk3DES();
        } catch (InvalidKeyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void jdk3DES() throws InvalidKeyException,
    NoSuchAlgorithmException, InvalidKeySpecException,
    NoSuchPaddingException, IllegalBlockSizeException,
    BadPaddingException {

// 生成密钥
// 初始化(对称)密钥生成器
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
keyGenerator.init(168);
// ===生成密钥并编码,使用字节数组接受

SecretKey secretKey = keyGenerator.generateKey();
byte[] byteKey = secretKey.getEncoded();

// 密钥转换
DESedeKeySpec desKeySpec = new DESedeKeySpec(byteKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key convertSecretKey = factory.generateSecret(desKeySpec);

// 加密
// result是密文
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println(byteHexStr(result));

// 解密
// 把cipher初始化解密码 
// converSecretKey是密钥
// 形参result是密文,返回结果是byte[]

cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
result = cipher.doFinal(result);
System.out.println(new String(result));

}




    /**
     * 
     * 字节数组按照16进制转为字符串
     * @param b
     * @return
     */
     public static String byteHexStr(byte[] b) {
            String stmp = "";
            StringBuilder sb = new StringBuilder("");
            for (int n = 0; n < b.length; n++) {
              stmp = Integer.toHexString(b[n] & 0xFF);
              sb.append((stmp.length() == 1) ? "0" + stmp : stmp);
            }
            return sb.toString().toUpperCase().trim();
          }


}
CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值