private static final String RSA = "RSA";
private static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";
private final static String KEY ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7CuoFFgrxkQGi/LWV2yIUlLyOT7BaDjT8cJks/tfEUkpSNibvPZ2t0iflBl/i76LmdPwG8Zq23ySmODmgzx8g/Z51Onv6CSQ88jCXdL60UXvFqgcEO34POlyoCyrb1tNXV3ikjFbJVYdpnZ+yNzwCobp8217b6/xAULZgcWu2xlQ6jF1yNV/8YmZvCNfNz6SwOgEaengJzSk1rdfwXrmqzsceZrazSdgdvr69iRPQc69vvlge3tlNOnKo8cmESOnZ4jle5+Xy5/+n7IjEvJlKhOEgpWIF1FfjNDDgHXjl4jng1UoNkgwtxBvarG9YVKMZLdODdfMcwutbB9ayZ+fwIDAQAB";
* 用公钥对字符串进行加密
* @param data 原文
* @return
@RequiresApi(api = Build.VERSION_CODES.O)
public static String encryptByPublicKey(byte[] data) throws Exception {
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(KEY.getBytes());
KeyFactory kf = KeyFactory.getInstance(RSA);
PublicKey keyPublic = kf.generatePublic(keySpec);
Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING);
cp.init(Cipher.ENCRYPT_MODE, keyPublic);
return String.valueOf(cp.doFinal(data));
报错如下:
java.security.spec.InvalidKeySpecException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: Error parsing public key
将公钥使用base64加密,改为:
@RequiresApi(api = Build.VERSION_CODES.O)
public static String encryptByPublicKey(byte[] data) throws Exception {
byte[] bytes = Base64.getDecoder().decode(KEY.getBytes());
KeyFactory kf = KeyFactory.getInstance(RSA);
PublicKey keyPublic = kf.generatePublic(new X509EncodedKeySpec(bytes));
Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING);
cp.init(Cipher.ENCRYPT_MODE, keyPublic);
return Base64.getEncoder().encodeToString(cp.doFinal(data));
packageio.xjar.util;importorg.apache.commons.codec.binary.Base64;importsun.misc.BASE64Decoder;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeExcept...
/// PEM格式公钥转换成XML格式公钥
/// </summary>
/// <param name="publicKey">PEM格式公钥,(纯文字字符,注意不带-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----)</param>
产生这一错误的原因是:~/.ssh/id_rsa.pub文件可能不是通过ssh-keygen生成的原始文件,而是通过别的工具导出的,最可能的情况就是通过。所以会出现解析错误。解决方法是: 使用ssh-keygen从私钥生成的公钥文件。
$privateKey = openssl_pkey_new();
while($message = openssl_error_string()){
echo $message.''.PHP_EOL;
调用后会有如下输出:
error:02001003:system library:fopen:No such process
error:2006D080:BIO rout
支付宝踩坑:java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000b9:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
这个问题是:Android4.1的问题,4.1之后就是加KeyFactory keyf = KeyFactor...
[code="java"]
private static final String KEY_ALGORITHM = "RSA";
private static final String PUBLIC_KEY ="publicKey";
private static final String PRIVATE_KEY ="privateKey";
public st...
1、生成 myplatform.pem
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out myplatform.pem
2、生成platform.p12。
alias别名是mystore,密码是123456
openssl pkcs12 -export -in platform.x509.pem -inkey myplatform.pem -out platform.p12 -password pass:123456 -name myst..