I tried to use the field-level encryption provided by MongoDB in version 4.2. But I got some errors.
Caused by: java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:278)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
at com.sun.jna.Native.register(Native.java:1722)
at com.mongodb.crypt.capi.CAPI.<clinit>(CAPI.java:759)
at com.mongodb.crypt.capi.MongoCryptImpl.<init>(MongoCryptImpl.java:91)
at com.mongodb.crypt.capi.MongoCrypts.create(MongoCrypts.java:36)
at com.mongodb.client.internal.Crypts.createCrypt(Crypts.java:35)
at com.mongodb.Mongo.<init>(Mongo.java:328)
at com.mongodb.Mongo.<init>(Mongo.java:313)
at com.mongodb.Mongo.<init>(Mongo.java:309)
at com.mongodb.MongoClient.<init>(MongoClient.java:328)
Then I modified jdk to 32 bits and I got another error message.
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\longf\AppData\Local\Temp\jna-103156074\jna6619363862608272389.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:947)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922)
at com.sun.jna.Native.<clinit>(Native.java:190)
at com.mongodb.crypt.capi.CAPI.<clinit>(CAPI.java:759)
at com.mongodb.crypt.capi.MongoCryptImpl.<init>(MongoCryptImpl.java:91)
at com.mongodb.crypt.capi.MongoCrypts.create(MongoCrypts.java:36)
at com.mongodb.client.internal.Crypts.createCrypt(Crypts.java:35)
at com.mongodb.client.internal.MongoClientImpl.<init>(MongoClientImpl.java:70)
at com.mongodb.client.internal.MongoClientImpl.<init>(MongoClientImpl.java:61)
at com.mongodb.client.MongoClients.create(MongoClients.java:114)
at com.mongodb.client.MongoClients.create(MongoClients.java:50)
OS: Windows 10
MongoDB version: 4.2.0
mongo-java-driver: 3.11.0
mongodb-crypt: 1.0.0-beta4
System.setProperty("jna.prefix", "win32-x86-64");
final byte[] localMasterKey = new byte[96];
new SecureRandom().nextBytes(localMasterKey);
Map<String, Map<String, Object>> kmsProviders = new HashMap<String, Map<String, Object>>() {{
put("local", new HashMap<String, Object>() {{
put("key", localMasterKey);
}});
}};
String keyVaultNamespace = "admin.datakeys";
AutoEncryptionSettings autoEncryptionSettings = AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviders)
.build();
MongoClientSettings clientSettings = MongoClientSettings.builder()
.autoEncryptionSettings(autoEncryptionSettings)
.build();
MongoClient mongoClient = MongoClients.create(clientSettings);
MongoCollection<Document> collection = mongoClient.getDatabase("test").getCollection("coll");
collection.drop(); // Clear old data
collection.insertOne(new Document("encryptedField", "123456789"));
System.out.println(collection.find().first().toJson());
Update
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Error:
Caused by: java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) Client VM (build 25.221-b11, mixed mode)
Error:
Can't load AMD 64-bit .dll on a IA 32-bit platform
It seems like application is trying to load a native library like ".dll" and that library does not exist in that paths of PATH environment variable and java.library.path system property. Please check the value passed in the System.loadLibrary method is correct and that the library actually exists. Moreover you can try to provide absolute path of the library.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.