本人新手,现遇到个项目,需要进行"RSA/ECB/PKCS1Padding"算法加密. java代码如下: public static String encrypt(String source, String publicKey) throws Exception { Key key = getPublicKey(publicKey); /** 得到Cipher对象来实现对源数据的RSA加密 / Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] b = source.getBytes(); /* 执行加密操作 */ byte[] b1 = cipher.doFinal(b); return new String(Base64.encodeBase64(b1), UTF-8); } public static PublicKey getPublicKey(String key) throws Exception { X509EncodedKeySpec keySpec = new X509EncodedKeySpec( Base64.decodeBase64(key.getBytes())); KeyFactory keyFactory = KeyFactory.getInstance(“RSA”); PublicKey publicKey = keyFactory.generatePublic(keySpec); return publicKey; } 我该如何将java代码转为为node.js,运用Cipher加密,应该调哪个模块,求告知。
你好,现在遇到了与你一样的问题,请问你是解决了吗,是怎么解决的?
请看这篇文章 《Nodejs开发加密货币》之十:三张图让你全面掌握加密解密技术 以及这篇 《Nodejs开发加密货币》之九:加密和验证 或许就够用了。
这个还是解决不了我的问题啊。那个RSA/ECB/PKCS1Padding对应的java里面的是什么样子的,有没有对照表一类的。
@weizhigang 都已经知道是pcks1,对应的就是pcks1啊, 如果无法互通,肯定是你哪里写错了
我这边现在那个公钥(key)是一个纯的字符串,然后加密的java代码如下: /** * 用公钥加密 * @param data 加密数据 * @param key 公钥 * @return 加密后的字节数组 * @throws Exception 异常 */ public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception { byte[] encryptedData = null;
//对公钥解密
byte[] keyBytes = decryptBASE64(key);
//取公钥
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);
Key publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
//对数据解密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 加密时超过maxEncryptBlockSize字节就报错。为此采用分段加密的办法来加密
int maxEncryptBlockSize = getMaxEncryptBlockSize(keyFactory, publicKey);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try {
int dataLength = data.length;
for (int i = 0; i < data.length; i += maxEncryptBlockSize) {
int encryptLength = dataLength - i < maxEncryptBlockSize ? dataLength - i
: maxEncryptBlockSize;
byte[] doFinal = cipher.doFinal(data, i, encryptLength);
bout.write(doFinal);
}
encryptedData = bout.toByteArray();
} finally {
if (bout != null) {
bout.close();
}
}
return encryptedData;
}
我想要用node实现同样的加密方式,要怎么做呢,对加密这个不太熟悉,尝试了很多种写法,都不行,请大家指导一下
@weizhigang rsa非对称加密nodejs的crypto模块不支持的,需要用第三方的模块
@weizhigang node-rsa就行,最近刚弄过