Wie verwenden Sie drei Tasten, mit triple-des(3des) in Java

Fand ich einen link in stackoverflow hier Verwendung-3des-Verschlüsselung-Entschlüsselung-in-java,aber in der Tat die Methode verwendet zwei parameter:HG58YZ3CR9" und die "IvParameterSpec iv = new IvParameterSpec(new byte[8]);"

Aber die starke Möglichkeit, die triple-des-konnte, drei verschiedene Schlüssel zum verschlüsseln der Nachricht.So, wie das zu tun? Ich finde eine mehond in der Ziffer, die zu verwenden "SecureRandom" als weiteren parameter.Also ist das der richtige Weg?


Die erste Methode code ist unten:

import java.security.MessageDigest;
import java.util.Arrays;

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

public class TripleDESTest {

    public static void main(String[] args) throws Exception {

        String text = "kyle boon";

        byte[] codedtext = new TripleDESTest().encrypt(text);
        String decodedtext = new TripleDESTest().decrypt(codedtext);

        System.out.println(codedtext); //this is a byte array, you'll just see a reference to an array
        System.out.println(decodedtext); //This correctly shows "kyle boon"
    }

    public byte[] encrypt(String message) throws Exception {
        final MessageDigest md = MessageDigest.getInstance("SHA-1");
        final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
                .getBytes("utf-8"));
        final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
        for (int j = 0, k = 16; j < 8;) {
            keyBytes[k++] = keyBytes[j++];
        }

        final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key, iv);

        final byte[] plainTextBytes = message.getBytes("utf-8");
        final byte[] cipherText = cipher.doFinal(plainTextBytes);
        //final String encodedCipherText = new sun.misc.BASE64Encoder()
        //.encode(cipherText);

        return cipherText;
    }

    public String decrypt(byte[] message) throws Exception {
        final MessageDigest md = MessageDigest.getInstance("SHA-1");
        final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
                .getBytes("utf-8"));
        final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
        for (int j = 0, k = 16; j < 8;) {
            keyBytes[k++] = keyBytes[j++];
        }

        final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        final Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
        decipher.init(Cipher.DECRYPT_MODE, key, iv);

        //final byte[] encData = new
        //sun.misc.BASE64Decoder().decodeBuffer(message);
        final byte[] plainText = decipher.doFinal(message);

        return new String(plainText, "UTF-8");
    }
}
  • Brauchen Sie, um inter-Betrieb mit einigen vorhandenen code? Wenn nicht, warum verwenden Sie 3DES anstelle von AES?
  • Der server verwendet 3des seit vielen Jahren und unsere manager nicht wollen, ändern Sie den Algorithmus der server
InformationsquelleAutor Marshal Chen | 2013-07-04
Schreibe einen Kommentar