Zunächst sollten Sie sich ansehen, warum der Speicherprozess ist so intensiv. Es könnte sein, dass Sie in der Lage sind, das Hashing von der Operation mit dem privaten Schlüssel (Auffüllen, modulare Potenzierung, Kodierung) herauszufiltern. Dass der Signiervorgang so viel Speicherbedarf hat, deutet darauf hin, dass etwas nicht stimmt. Es könnte so einfach sein wie Signature#update
anstelle von Signature#doFinal
direkt aufrufen.
Wie für die 32-Bit-DLL, nein, Sie können nicht nur das in eine 64-Bit-Anwendung wie die JVM laden. Schauen Sie beispielsweise here, um zu sehen, dass dies nicht funktionieren würde. Es gibt natürlich Wege um es herum; Erstellen Sie einen separaten 64-Bit-Prozess, verbinden Sie sich dazu mit Ihrer eigenen SignatureSpi
-Klasse in Ihrem eigenen Java-Provider (der mit einem von Oracle bereitgestellten Schlüssel signiert werden muss). Unnötig zu sagen, das ist eine Menge Arbeit, um etwas zu reparieren, das einfach funktionieren sollte.
Es ist natürlich eine Schande, alle diese Probleme zu durchlaufen, während Sie ein sehr High-End-System haben ohne eine gültige Upgrade-Strategie, mit einer veralteten Version von Java. Sie sollten sich darauf konzentrieren, das zuerst zu beheben. Sie sollten sich auch fragen, warum Sie kein 64-Bit-PKCS # 11 .dll
für Ihre Situation bekommen können.
vergleichen https://docs.oracle.com/javase/7/docs/technotes/guides/security/p11guide.html#Requirements und https://docs.oracle.com/javase/8/docs/technotes/ guides/security/p11guide.html # Anforderungen sollten Sie versuchen, Java 8 – zapl
Siehe hier: http://stackoverflow.com/questions/8056818/accessing-hardware-pkcs11-token-on-a-64-bit-machine – Eric
Warum tun hast du keinen Speicher mehr? Ist der Signiervorgang wirklich so speicherintensiv? – Kayaman