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

发布于 2022-08-30 01:02:37 字数 3868 浏览 14 评论 0

和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();
         }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨离汐 2022-09-06 01:02:37

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文