当前位置:Gxlcms > PHP教程 > DES解密,但是key是36字节的,怎么处理?

DES解密,但是key是36字节的,怎么处理?

时间:2021-07-01 10:21:17 帮助过:9人阅读

和java端进行对接的,我用php解密,key是36字节的,所以没有头绪了。我想着是不是有把这36字节转化成16或者32字节的通用方法?先谢谢大家了。

下面是java的代码片段:

public static String DES_KEY="36位的key";

执行方法:

DesUtil.decrypt(rs.getString(i+1),Global.DES_KEY );

类:

    public class DesUtil {
             private final static String DES = "DES";
             private final static String PADDING="DES/ECB/PKCS5Padding";
             private final static Log log= LogFactory.getLog(DesUtil.class);

             public static byte[] encrypt(byte[] src, byte[] key)throws Exception {
                     SecureRandom sr = new SecureRandom();
                    DESKeySpec dks = new DESKeySpec(key);
                     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
                     SecretKey securekey = keyFactory.generateSecret(dks);
                     Cipher cipher = Cipher.getInstance(PADDING);
                     cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
                     return cipher.doFinal(src);

                  }
                public static byte[] decrypt(byte[] src, byte[] key)throws Exception {
                     SecureRandom sr = new SecureRandom();
                     DESKeySpec dks = new DESKeySpec(key);
                    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

                     SecretKey securekey = keyFactory.generateSecret(dks);
                     Cipher cipher = Cipher.getInstance(PADDING);
                     cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
                   return cipher.doFinal(src);

                  }
              public final static String decrypt(String data,String key){

                  try {
                           return new String(decrypt(Base64.decode(data.getBytes()),
                      key.getBytes()));
                 }catch(Exception e) {
                            log.error("Exception -->DesUtil");
                       e.printStackTrace();
                 }
                 return null;
               }

               public final static String decrypt(String data,String key, String charset){

                  try {
                           return new String(decrypt(Base64.decode(data.getBytes()),
                      key.getBytes()), charset);
                 }catch(Exception e) {
                          log.error("Exception -->DesUtil ");
                          e.printStackTrace();
                 }
                 return null;
               }

               public final static String encrypt(String code,String key){
                 try {
                   return Base64.encodeBytes(encrypt(code.getBytes("utf-8"), key.getBytes()));
                 }catch(Exception e) {
                          log.error("Exception -->DesUtil");
                          e.printStackTrace();
                 }
                 return null;
               }
/*
    public static void main(String[] args) {
         /**
         * Convert byte[] string
         *
          * @param src
         * @return
         */
         public static String bytesTo16HexString(byte[] src) {
                   StringBuilder stringBuilder = new StringBuilder("");
                   if (src == null || src.length <= 0) {
                            return "";
                   }
                   for (int i = 0; i < src.length; i++) {
                            int v = src[i] & 0xFF;
                            String hv = Integer.toHexString(v);
                            if (hv.length() < 2) {
                                     stringBuilder.append(0);
                            }
                            stringBuilder.append(hv);
                   }
                   return stringBuilder.toString();
         }
}

回复内容:

和java端进行对接的,我用php解密,key是36字节的,所以没有头绪了。我想着是不是有把这36字节转化成16或者32字节的通用方法?先谢谢大家了。

下面是java的代码片段:

public static String DES_KEY="36位的key";

执行方法:

DesUtil.decrypt(rs.getString(i+1),Global.DES_KEY );

类:

    public class DesUtil {
             private final static String DES = "DES";
             private final static String PADDING="DES/ECB/PKCS5Padding";
             private final static Log log= LogFactory.getLog(DesUtil.class);

             public static byte[] encrypt(byte[] src, byte[] key)throws Exception {
                     SecureRandom sr = new SecureRandom();
                    DESKeySpec dks = new DESKeySpec(key);
                     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
                     SecretKey securekey = keyFactory.generateSecret(dks);
                     Cipher cipher = Cipher.getInstance(PADDING);
                     cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
                     return cipher.doFinal(src);

                  }
                public static byte[] decrypt(byte[] src, byte[] key)throws Exception {
                     SecureRandom sr = new SecureRandom();
                     DESKeySpec dks = new DESKeySpec(key);
                    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

                     SecretKey securekey = keyFactory.generateSecret(dks);
                     Cipher cipher = Cipher.getInstance(PADDING);
                     cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
                   return cipher.doFinal(src);

                  }
              public final static String decrypt(String data,String key){

                  try {
                           return new String(decrypt(Base64.decode(data.getBytes()),
                      key.getBytes()));
                 }catch(Exception e) {
                            log.error("Exception -->DesUtil");
                       e.printStackTrace();
                 }
                 return null;
               }

               public final static String decrypt(String data,String key, String charset){

                  try {
                           return new String(decrypt(Base64.decode(data.getBytes()),
                      key.getBytes()), charset);
                 }catch(Exception e) {
                          log.error("Exception -->DesUtil ");
                          e.printStackTrace();
                 }
                 return null;
               }

               public final static String encrypt(String code,String key){
                 try {
                   return Base64.encodeBytes(encrypt(code.getBytes("utf-8"), key.getBytes()));
                 }catch(Exception e) {
                          log.error("Exception -->DesUtil");
                          e.printStackTrace();
                 }
                 return null;
               }
/*
    public static void main(String[] args) {
         /**
         * Convert byte[] string
         *
          * @param src
         * @return
         */
         public static String bytesTo16HexString(byte[] src) {
                   StringBuilder stringBuilder = new StringBuilder("");
                   if (src == null || src.length <= 0) {
                            return "";
                   }
                   for (int i = 0; i < src.length; i++) {
                            int v = src[i] & 0xFF;
                            String hv = Integer.toHexString(v);
                            if (hv.length() < 2) {
                                     stringBuilder.append(0);
                            }
                            stringBuilder.append(hv);
                   }
                   return stringBuilder.toString();
         }
}

用冗余字符补全到48字节。

人气教程排行