【发布时间】:2020-10-14 21:03:42
【问题描述】:
我写了一个函数来加密一个字符串,因为它是一个敏感信息。我正在运行一些睾丸,我发现每次运行生成的输出都不同。
我不确定它是否与盐或类似的东西有关。
每次调用输出都不同是正常行为吗?这是一个好的做法还是坏的做法?
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.bouncycastle.util.encoders.Base64;
import org.bouncycastle.jce.interfaces.ECPublicKey;
import javax.crypto.Cipher;
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Security;
public class App {
private static String PUBLIC_PEM = "/opt/public.pem";
static String TO_ENCODE = "not going well";
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
App app = new App();
PublicKey publicKey = app.getECPublicKeyFromPEM(PUBLIC_PEM);
byte[] message = TO_ENCODE.getBytes();
byte[] out1;
Cipher c1 = Cipher.getInstance("ECIES");
c1.init(Cipher.ENCRYPT_MODE, publicKey, new SecureRandom());
out1 = c1.doFinal(message, 0, message.length);
System.out.println(Base64.toBase64String(out1));
}
public ECPublicKey getECPublicKeyFromPEM(String publicPem) throws Exception {
PEMParser pemParser = getPemFile(publicPem);
SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(pemParser.readObject());
return (ECPublicKey) new JcaPEMKeyConverter().getPublicKey(subjectPublicKeyInfo);
}
private PEMParser getPemFile(String path) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(path));
return new PEMParser(reader);
}
}
【问题讨论】:
标签: java encryption bouncycastle