• java


      1 import java.security.SecureRandom;
      2 import javax.crypto.spec.DESKeySpec;
      3 import javax.crypto.SecretKeyFactory;
      4 import javax.crypto.SecretKey;
      5 import javax.crypto.Cipher;
      6 
      7 public class zte1 {
      8     public static void main(String[] args) {
      9 //        System.out.println(htol("ff"));
     10       /*  System.out.println(ltoh(255));
     11         System.out.println(atoh("a"));
     12         System.out.println(htoa("61"));*/
     13        /* String str = "我在写工具类";
     14         //密码,长度要是8的倍数
     15         String password = "12345678";
     16         byte[] result = zte1.encrypy(str.getBytes(), password);
     17         System.out.println("加密后:" + new String(result));
     18 
     19         byte[] decryresult = zte1.decrypt(result, password);
     20         System.out.println("解密后:" + new String(decryresult));*/
     21 
     22 //        System.out.println(hexString2binaryString("a1"));
     23 //        System.out.println(hexString2binaryString("b0"));
     24 //        System.out.println(BIT_XOR("a1","b0"));
     25 //        System.out.println(BIT_INV("a"));
     26     }
     27 
     28     /**
     29      * 16进制转换成10进制无符号数
     30      *
     31      * @param hexString
     32      * @param
     33      * @return
     34      */
     35     public static int htol(String hexString) {
     36        /* int  desc=0;
     37         for (int i = 0; i <hexString.length() ; i++) {
     38             desc+=Integer.parseInt(hexString.substring(i,i+1),16);
     39         }*/
     40         if (hexString == null || "".equals(hexString)) {
     41             return 0;
     42         }
     43         int desc = 0;
     44         for (char c : hexString.toCharArray())
     45             desc = desc * 16 + Character.digit(c, 16);
     46         return desc;
     47     }
     48 
     49     /**
     50      * 10进制数转换成16进制串
     51      *
     52      * @param res
     53      * @return
     54      */
     55     public static String ltoh(int res) {
     56         String hexString = Integer.toHexString(res);
     57         return hexString;
     58     }
     59 
     60     /**
     61      * ASCII码转换成16进制
     62      *
     63      * @param asciiString
     64      * @return
     65      */
     66     public static String atoh(String asciiString) {
     67         char[] chars = asciiString.toCharArray();
     68         StringBuffer stringBuffer = new StringBuffer();
     69         for (int i = 0; i < chars.length; i++) {
     70             stringBuffer.append(Integer.toHexString(chars[i]));
     71         }
     72         return stringBuffer.toString();
     73     }
     74 
     75     /**
     76      * 16进制转换成ASCII码
     77      *
     78      * @param hexString
     79      * @return
     80      */
     81     public static String htoa(String hexString) {
     82         StringBuffer stringBuffer = new StringBuffer();
     83         StringBuffer temp = new StringBuffer();
     84         for (int i = 0; i < hexString.length() - 1; i += 2) {
     85             String output = hexString.substring(i, i + 2);
     86             int decimal = Integer.parseInt(output, 16);
     87             temp.append((char) decimal);
     88         }
     89         return temp.toString();
     90     }
     91 
     92     /**
     93      * DES加密
     94      *
     95      * @param datasource
     96      * @param password
     97      * @return
     98      */
     99     public static byte[] encrypy(byte[] datasource, String password) {
    100         try {
    101             SecureRandom random = new SecureRandom();
    102             DESKeySpec desKeySpec = new DESKeySpec(password.getBytes());
    103             //创建秘钥工厂,然后用它把DESKeySpec转换成
    104             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    105             SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
    106             //Cipher对象实际完成加密过程
    107             Cipher cipher = Cipher.getInstance("DES");
    108             //用秘钥初始化Cipher对象
    109             cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
    110             //现在,获取数据并加密
    111             //正式执行加密操作
    112             return cipher.doFinal(datasource);
    113         } catch (Exception e) {
    114             e.printStackTrace();
    115         }
    116         return null;
    117     }
    118 
    119     /**
    120      * DES解密
    121      *
    122      * @param src
    123      * @param password
    124      * @return
    125      */
    126     public static byte[] decrypt(byte[] src, String password) {
    127 
    128         try {
    129             //DES算法要求有同一个可信任的随机数源
    130             SecureRandom random = new SecureRandom();
    131             //创建一个DESKeySpec对象
    132             DESKeySpec desKeySpec = new DESKeySpec(password.getBytes());
    133             //创建一个秘钥工厂,
    134             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    135             //将DESKeySpec对象转换成SecretKey对象。
    136             SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
    137             //Cipher对象完成解密操作
    138             Cipher cipher = Cipher.getInstance("DES");
    139             //用秘钥初始化Cipher对象
    140             cipher.init(Cipher.DECRYPT_MODE, secretKey, random);
    141             return cipher.doFinal(src);
    142 
    143         } catch (Exception e) {
    144             e.printStackTrace();
    145         }
    146         return null;
    147     }
    148 
    149     /**
    150      * 将16进制转换成2进制
    151      *
    152      * @param hexString
    153      * @return
    154      */
    155     public static String hexString2binaryString(String hexString) {
    156 //        if (hexString == null || hexString.length() % 2 != 0)
    157 //            return null;
    158         String bString = "", tmp;
    159         for (int i = 0; i < hexString.length(); i++) {
    160             tmp = "0000" + Integer.toBinaryString(Integer.parseInt(hexString.substring(i, i + 1), 16));
    161             bString += tmp.substring(tmp.length() - 4);
    162 //            bString=Integer.toBinaryString(Integer.parseInt(hexString.substring(i, i + 1),16));
    163         }
    164         return bString;
    165     }
    166 
    167     /**
    168      * 将2进制转换成16进制
    169      *
    170      * @param binaryString
    171      * @return
    172      */
    173     public static String binaryString2hexString(String binaryString) {
    174       /*  if (binaryString == null || binaryString.equals("") || binaryString.length() % 8 != 0) {
    175             return null;
    176         }*/
    177         StringBuffer stringBuffer = new StringBuffer();
    178         int iTmp = 0;
    179         for (int i = 0; i < binaryString.length(); i += 4) {
    180             iTmp = 0;
    181             for (int j = 0; j < 4; j++) {
    182                 iTmp += Integer.parseInt(binaryString.substring(i + j, i + 1 + j)) << (4 - j - 1);
    183             }
    184             stringBuffer.append(Integer.toHexString(iTmp));
    185         }
    186         return stringBuffer.toString();
    187     }
    188 
    189     /**
    190      * 16进制位异或,返回16进制
    191      *
    192      * @param str1
    193      * @param str2
    194      * @return
    195      */
    196     public static String BIT_XOR(String str1, String str2) {
    197         if (str1.length() != str2.length()) {
    198             return null;
    199         }
    200         String string = new String();
    201         for (int i = 0; i < hexString2binaryString(str1).length(); i++) {
    202             if (hexString2binaryString(str1).charAt(i)== hexString2binaryString(str2).charAt(i)) {
    203                 string+="0";
    204             } else {
    205                 string+="1";
    206             }
    207 //            System.out.println(string);
    208         }
    209 //        System.out.println(stringBuffer);
    210         return binaryString2hexString(string);
    211     }
    212 
    213     /**
    214      * 16进制按位取反,返回16进制
    215      *
    216      * @param hexString
    217      * @return
    218      */
    219     public static String BIT_INV(String hexString) {
    220         String str_binary = hexString2binaryString(hexString);
    221 //        System.out.println(str_binary+"==========================");
    222         String binary = "";
    223         for (int i = 0; i < str_binary.length(); i++) {
    224             if (str_binary.charAt(i) == '0') {
    225                 binary += "1";
    226             }
    227             if (str_binary.charAt(i) == '1') {
    228                 binary += "0";
    229             }
    230 //            System.out.println(binary+"================");
    231         }
    232         return binaryString2hexString(binary);
    233     }
    234 
    235 }
  • 相关阅读:
    hdu4059 The Boss on Mars
    cf475D CGCDSSQ
    HDU
    cf1447D Catching Cheaters
    cf1440 Greedy Shopping
    Treats for the Cows
    dp废物学会了记录路径
    D. Jzzhu and Cities
    cf1359D Yet Another Yet Another Task
    关于sg函数打表的理解
  • 原文地址:https://www.cnblogs.com/zhuxiaodong/p/6043524.html
Copyright © 2020-2023  润新知