DH算法
import org.apache.commons.codec.binary.Hex
import javax.crypto.Cipher
import javax.crypto.KeyAgreement
import javax.crypto.SecretKey
import javax.crypto.interfaces.DHPublicKey
import javax.crypto.spec.DHParameterSpec
import java.security.KeyFactory
import java.security.KeyPair
import java.security.KeyPairGenerator
import java.security.PublicKey
import java.security.spec.X509EncodedKeySpec
public class DH {
private static String srcMsg = "imooc security dh"
public static void main(String[] args) {
jdkDH(srcMsg)
}
public static void jdkDH(String srcMsg) {
try {
// 初始化发送方密钥
KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH")
senderKeyPairGenerator.initialize(512)
KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair()
// 发送发公钥,需要发送给接收方
byte[] senderPublicKeyEnc = senderKeyPair.getPublic().getEncoded()
// 初始化接收方密钥
KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH")
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKeyEnc)
PublicKey receiverPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec)
DHParameterSpec dhParameterSpec = ((DHPublicKey) receiverPublicKey).getParams()
KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH")
receiverKeyPairGenerator.initialize(dhParameterSpec)
KeyPair receiverKeyPair = receiverKeyPairGenerator.generateKeyPair()
byte[] receiverPublicKeyEnc = receiverKeyPair.getPublic().getEncoded()
// 密钥构建
KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH")
receiverKeyAgreement.init(receiverKeyPair.getPrivate())
receiverKeyAgreement.doPhase(receiverPublicKey, true)
SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES")
KeyFactory senderKeyFactory = KeyFactory.getInstance(