私は、RSA鍵ペアをjavascriptで生成し、公開鍵をサーバ側のデータベースに(文字列として)格納し、 Javaのサーバ側では、格納されている公開鍵で文字列を暗号化し、それをクライアント側に送信します。クライアント側では、その文字列を秘密鍵で復号化します。RSA Java暗号化とNode.js復号化が機能していない
クライアントブラウザでbrowsifiedバージョンのnode-rsaを使用しています。クライアントでまず
私は、文字列
var NodeRSA = require('node-rsa');
var key = new NodeRSA({b: 1024});
key.exportKey("pkcs8-private");
key.exportKey("pkcs8-public-pem");
エクスポートした秘密鍵がクライアントに格納され、私が使用し、サーバ
次のパブリックとしてそれらを格納し、鍵ペアを生成し、キーをエクスポートJavaは受信した公開鍵で文字列を暗号化するため、pkcs8公開鍵をJava PublicKeyオブジェクトに解析します。
String pubKey = "<Retrieved pkcs8 public key>";
pubKey = pubKey.replaceAll("(-+BEGIN PUBLIC KEY-+\\r?\\n|-+END PUBLIC KEY-+\\r?\\n?)", "");
byte[] keyBytes = Base64.decodeBase64(pubKey);
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey pk = kf.generatePublic(spec);
そして、それうまく動作し、Base64では、私はそれをで文字列を解読しようとするこの
WTS1J2f4w5icsUOCtulyHDaBmB5lN7D8mnj0QWMDBkUGiPHkM8nHVx9pd0MtbQAQNasQS2X8kisLMYyEMPasFZtDH0zX1e8lNYaW0xMKsg++ge87f+95nl+TmxDy6S1m7Ce/n0wXno+0MbSv8YsJtsUcAleyyfQX2bxqX8u7Gjs=
のように暗号化された文字列をエンコードされた私を返し
byte[] cipherText;
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pk);
cipherText = cipher.doFinal("Hello World!".getBytes());
return Base64.encodeBase64String(cipherText);
でテキストを暗号化しますクライアント側
まず、ノード-rsaに格納されたキーを再インポートします
var NodeRSA = require('node-rsa');
var key = new NodeRSA();
key.importKey("<exported private key string>","pkcs8-private");
key.importKey("<exported public key string>","pkcs8-public-pem");
その後、私はBase64での暗号化を解除しようとする。これは、問題が発生した場合には、JavaScriptを有効にしてエラー
Uncaught Error: Error during decryption (probably incorrect key). Original error: Error: Error decoding message, the lHash calculated from the label provided and the lHash in the encrypted data do not match.(…) However i have tested that if i encrypt and decrypt the text just within javascript, it works just fine. This makes me think that it's some difference between the way i encrypted it at java and how it's done at javascript
は、誰もがそのI間違いを指摘でしスローで暗号化された文字列に
key.decrypt("<Base64 Encoded Encrypted>", 'utf-8');
をエンコードここで作られた?