des - Seseorang yang tahu php dan java masuk dan ingin bertanya soalan.
高洛峰
高洛峰 2017-05-18 10:45:52
0
2
704

1 Apabila menjalankan perniagaan dengan syarikat lain, pihak lain menggunakan Java dan saya menggunakan PHP.
2 Kedua-dua pihak akan menyulitkan data dengan DES dahulu dan kemudian penyulitan base64. Hantar
3 Pihak lain menghantar penyulitan dan penyahsulitan java, saya harus mengikutinya dan membuat satu php. Tetapi saya tidak dapat memahami kod java.
4 Semoga Allah sibukkan, terima kasih banyak-banyak.

package com.ab.mediation.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 * 对外接口数据加密/解密类 
 * @author xin
 *
 */
public class DesUtil {

    private final static String DES = "DES";

    public static void main(String[] args) throws Exception {
        String tDoc = "";// 请求报文
        String encoding = "GBK";
        // 将函数参数赋给本地参数
        String path = "/Users/jieliu/Code/a.txt";
        // String path = "F:\testxml\requestAppPolInp881.xml";
        String path1 = path;
        // 初始化文件对象f
        File f = new File(path1);
        // 初始化读数据流对象reader
        InputStreamReader reader = new InputStreamReader(new FileInputStream(
                path1), encoding);
        // 根据f文件长度初始化字符串数据c[]
        char c[] = new char[(int) (f.length())];
        // 取到字符串长度,并将文件f内容写入数组c
        int length = reader.read(c);
        // 逐字节将字符串数组c[],赋给变量tDoc
        for (int i = 0; i < length; i++) {
            tDoc = tDoc + c[i];
        }

        String key = "12dc293d43db3b237849";
        System.out.println(encrypt(tDoc, key));
        System.out.println(decrypt(encrypt(tDoc, key), key));

    }

    /**
     * Description 根据键值进行加密
     * 
     * @param data
     * @param key
     *            加密键byte数组
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
        byte[] bt = encrypt(data.getBytes(), key.getBytes());
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }
    
    /**
     * 指定字符编码方式并加密
     * @param data
     * @param key
     * @param encoding
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key, String encoding) throws Exception {
        byte[] bt = encrypt(data.getBytes(encoding), key.getBytes());
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }

    /**
     * Description 根据键值进行解密
     * 
     * @param data
     * @param key
     *            加密键byte数组
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
            Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf, key.getBytes());
        return new String(bt);
    }
    
    /**
     * 根据键值解密并返回指定编码方式字符串
     * @param data
     * @param key
     * @param encoding
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key, String encoding) throws IOException,
        Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf, key.getBytes());
        return new String(bt, encoding);
    }

    /**
     * Description 根据键值进行加密
     * 
     * @param data
     * @param key
     *            加密键byte数组
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();

        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);

        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);

        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance(DES);

        // 用密钥初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

        return cipher.doFinal(data);
    }

    /**
     * Description 根据键值进行解密
     * 
     * @param data
     * @param key
     *            加密键byte数组
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();

        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);

        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);

        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);

        // 用密钥初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

        return cipher.doFinal(data);
    }
}
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(2)
phpcn_u1582

https://github.com/sjclijie/p...

Cuba gunakan ini. Ia mempunyai sedikit kaitan dengan kod java yang dia gunakan. Anda hanya perlu melaksanakan logik penyulitannya.

Nyahkod base64 pertama dan kemudian menyahsulit menggunakan algoritma des

我想大声告诉你

Maka anda harus memintanya secara langsung untuk memberikan anda versi PHP

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan