java的RSA/ECB/OAEPWithSHA-1AndMGF1Padding在js写法

How to encode using RSA/NONE/OAEPWithSHA-1AndMGF1Padding? · Issue #464 · digitalbazaar/forge · GitHub

参考了上面的链接

js加密代码

var forge = require('node-forge');
var base64 = require('Base64');

var pki = forge.pki;
publicKey = pki.publicKeyFromPem("-----BEGIN PUBLIC KEY-----\n" +
    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlKDo3Ipkji7ikUyG8iuiqfus3F5m7yW3\n" +
    "XwOk7mgzQwA9Ebe2P+sdkaAQTJ6p8cAde+NwLl6qqBJL/I6aGZvwCt7a8jqMjlw8Zgzx8r2Xk/y0\n" +
    "h+qtnzzByCcg5YQdIetHNi5EsbsBneCYbe3TsLdmdnZOSN8unCm2jJEBErcc4Jrmut/Vc6ob5A/Y\n" +
    "N7wDpSiYVYfW06Drgeu9iviUyA0tHBWLmOzVIQvELe/dJ5IhzjAuKVkwyRQnDQdaunHw1wBgpm21\n" +
    "h+pKEUZqMC601cfj9Qofq+sdETVcNFQZWUehWkhc2JrPVOnjEoitWUNh76LHYYWOH+gxTGWF0Mne\n" +
    "SrByNQIDAQAB" +
    "-----END PUBLIC KEY-----");
var encrypted = publicKey.encrypt("12345", 'RSA-OAEP', {
    mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
});
console.log("base64转码后:" + base64.btoa(encrypted));

java解密代码

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding", new BouncyCastleProvider());

//设置为解密模式,用私钥解密
cipher.init(Cipher.DECRYPT_MODE, privateKey);
//base64转换
String encoData=Base64Decoder.decode(encrypt);
//解密
byte[] data = cipher.doFinal(encoData);
System.out.println("解密后的数据:"+data);

java 密钥对生成

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA",new BouncyCastleProvider());

SecureRandom random = new SecureRandom();
keyPairGenerator.initialize(RSAUtils.KEYSIZE, random);

// 生成钥匙对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 得到公钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
// 得到私钥
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

sha256写法参考:Incompatible Javascript and Java encrypted content. · Issue #757 · digitalbazaar/forge · GitHub

var encrypted = publicKey.encrypt("123swssss", 'RSA-OAEP', {
    md: forge.md.sha256.create(),
    mgf1: {
        md: forge.md.sha256.create()
    }
});

java对应

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA256AndMGF1Padding", new BouncyCastleProvider());

版权声明:本文为sinat_25052547原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。