Was ist falsch mit IBM JCE-provider?

Ich habe eine JCE-test, der funktioniert mit allen Sun-JDKs, habe ich versucht, scheitert aber mit verschiedenen IBM-J9 JDKs (z.B. 1.6.0 build pwi3260sr8-20100409_01(SR8)). Die Ausnahme unten passiert, wenn der cipher initialisiert wird in den verschlüsseln Modus. Warum können die IBM JCE nicht mit seinem eigenen privaten Schlüssel? Bin ich etwas fehlt in meinem code?

  public void testBasicKeyGeneration() throws NoSuchAlgorithmException, 
      NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, 
      BadPaddingException, NoSuchProviderException, SignatureException {
      KeyPairGenerator generator = KeyPairGenerator.getInstance( "RSA" );
      generator.initialize( 2048 );
      KeyPair pair = generator.generateKeyPair();

      String data1 = "123456789012345678901234567890123456789012345678901234567890";
      Cipher cipher = Cipher.getInstance( "RSA" );
      cipher.init( Cipher.ENCRYPT_MODE, pair.getPrivate() );
      byte[] encrypted = cipher.doFinal( data1.getBytes() );

      cipher.init( Cipher.DECRYPT_MODE, pair.getPublic() );
      byte[] decrypted = cipher.doFinal( encrypted );
      String data2 = new String( decrypted );
      assertEquals( "en/decryption failed", data1, data2 );
  }

Hier ist der stack trace:

java.security.InvalidKeyException: Private key cannot be used to encrypt.
at com.ibm.crypto.provider.RSA.engineInit(Unknown Source)
at javax.crypto.Cipher.a(Unknown Source)
at javax.crypto.Cipher.a(Unknown Source)
at javax.crypto.Cipher.init(Unknown Source)
at javax.crypto.Cipher.init(Unknown Source)
at test.Test.testBasicKeyGeneration(LicenseHelperTest.java:56)
Einfach nur neugierig, was passiert, wenn man Schalter um und tun das verschlüsseln mit dem öffentlichen Schlüssel und die Entschlüsselung mit dem privaten Schlüssel? Normalerweise muss man das nicht verschlüsseln mit Ihrem privaten Schlüssel, weil jeder mit dem public-key entschlüsseln konnte. Es würde mich nicht Wundern, wenn IBM davon ausgegangen, eine Politik zu verschlüsseln, die nur mit einem öffentlichen Schlüssel signieren mit dem privaten Schlüssel und dann einbetten, dass in Ihrem code. Long shot, aber neugierig, was Sie finden.
Funktioniert wie ein Charme, wenn ich das tun, was Sie vorgeschlagen. Ich denke, meine Logik habe gewechselt, weil ich verschlüsseln Lizenzen und nicht wollen, um die privaten Schlüssel in der software ausgeliefert. Wenn Sie setzen, dass in einer Antwort, die ich akzeptieren kann.
C: Wäre das nicht gerade als effektiv erwiesen, indem er eine Nachricht verschlüsselt wurde mit dem öffentlichen Schlüssel? (Zugegeben, es kann immer noch sein vor-definierte Protokolle, die es tun, wie du beschreibst...)

InformationsquelleAutor FelixM | 2011-02-02

Schreibe einen Kommentar