You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.9 KiB
65 lines
2.9 KiB
package com.fr.password.tool.keys; |
|
|
|
import cn.hutool.core.util.ArrayUtil; |
|
import com.fr.password.tool.SecurityToolbox; |
|
import com.fr.password.tool.util.BCECUtil; |
|
import com.fr.password.tool.util.smx.SM2Util; |
|
import org.bouncycastle.crypto.params.ECPrivateKeyParameters; |
|
import org.bouncycastle.crypto.params.ECPublicKeyParameters; |
|
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey; |
|
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey; |
|
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; |
|
|
|
import java.io.IOException; |
|
import java.security.InvalidAlgorithmParameterException; |
|
import java.security.KeyPair; |
|
import java.security.KeyPairGenerator; |
|
import java.security.NoSuchAlgorithmException; |
|
import java.security.NoSuchProviderException; |
|
import java.security.spec.RSAKeyGenParameterSpec; |
|
|
|
/** |
|
* desc |
|
* |
|
* @author Anner |
|
* created on 2020-10-22 |
|
*/ |
|
public class LoadSeedKeys { |
|
|
|
private static LoadSeedKeys instance = new LoadSeedKeys(); |
|
|
|
private LoadSeedKeys() { |
|
} |
|
|
|
public static LoadSeedKeys getInstance() { |
|
return instance; |
|
} |
|
|
|
public byte[] loadSeedFile(String seed1, String seed2, String seed3) { |
|
byte[] random = new byte[0]; |
|
random = ArrayUtil.addAll(random, seed1.getBytes()); |
|
random = ArrayUtil.addAll(random, seed2.getBytes()); |
|
random = ArrayUtil.addAll(random, seed3.getBytes()); |
|
return random; |
|
} |
|
|
|
public String[] generateRSAKeys(byte[] random) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { |
|
FineSecureRandom fineSecureRandom = new FineSecureRandom(random); |
|
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); |
|
//传入一个伪随机源,保证相同seed产生相同密钥 |
|
keyPairGenerator.initialize(new RSAKeyGenParameterSpec(2048, RSAKeyGenParameterSpec.F4), fineSecureRandom); |
|
KeyPair keyPair = keyPairGenerator.generateKeyPair(); |
|
String decodeKey = SecurityToolbox.getInstance().getPrivateKey(keyPair); |
|
String encodeKey = SecurityToolbox.getInstance().getPublicKey(keyPair); |
|
return new String[]{encodeKey, decodeKey}; |
|
} |
|
|
|
public String generateSM2Keys(byte[] random) throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException, IOException { |
|
FineSecureRandom secureRandom = new FineSecureRandom(random); |
|
KeyPair keyPair = BCECUtil.generateKeyPair(SM2Util.DOMAIN_PARAMS, secureRandom); |
|
ECPrivateKeyParameters privateKeyParameters = BCECUtil.convertPrivateKeyToParameters((BCECPrivateKey) keyPair.getPrivate()); |
|
ECPublicKeyParameters publicKeyParameters = BCECUtil.convertPublicKeyToParameters((BCECPublicKey) keyPair.getPublic()); |
|
String key = SecurityToolbox.getInstance().byte2Base64(ByteUtils.toHexString(BCECUtil.convertECPrivateKeyToSEC1(privateKeyParameters, publicKeyParameters)).getBytes()); |
|
return key; |
|
} |
|
}
|
|
|