CryptoFS: Implementation of the Cryptomator encryption scheme.
- Access Cryptomator encrypted vaults from within your Java application
- Uses a
java.nio.file.FileSystemso code written against thejava.nio.fileAPI can easily be adapted to work with encrypted data - Open Source means: No backdoors, control is better than trust
For more information on the security details, visit cryptomator.org.
CryptoFS depends on Java 8 JRE/JDK. In addition, the JCE unlimited strength policy files (needed for 256-bit keys) must be installed.
Path storageLocation = Paths.get("/home/cryptobot/vault");
Files.createDirectories(storageLocation);
CryptoFileSystemProvider.initialize(storageLocation, "masterkey.cryptomator", "password");You have the option to use the convenience method CryptoFileSystemProvider#newFileSystem as follows:
FileSystem fileSystem = CryptoFileSystemProvider.newFileSystem(
storageLocation,
CryptoFileSystemProperties.cryptoFileSystemProperties()
.withPassphrase("password")
.withFlags(FileSystemFlags.READONLY) // readonly flag is optional of course
.build());or to use one of the standard methods from FileSystems#newFileSystem:
URI uri = CryptoFileSystemUri.create(storageLocation);
FileSystem fileSystem = FileSystems.newFileSystem(
uri,
CryptoFileSystemProperties.cryptoFileSystemProperties()
.withPassphrase("password")
.withFlags(FileSystemFlags.READONLY) // readonly flag is optional of course
.build());Note: Instead of CryptoFileSystemProperties, you can always pass in a java.util.Map with entries set accordingly.
For more details on construction, have a look at the javadoc of CryptoFileSytemProvider, CryptoFileSytemProperties, and CryptoFileSytemUris.
try (FileSystem fileSystem = ...) { // see above
// obtain a path to a test file
Path testFile = fileSystem.getPath("/foo/bar/test");
// create all parent directories
Files.createDirectories(testFile.getParent());
// Write data to the file
Files.write(testFile, "test".getBytes());
// List all files present in a directory
try (Stream<Path> listing = Files.list(testFile.getParent())) {
listing.forEach(System.out::println);
}
}For more details on how to use the constructed FileSystem, you may consult the javadocs of the java.nio.file package.
- Java 8 + JCE unlimited strength policy files (needed for 256-bit keys)
- Maven 3
mvn clean installPlease read our contribution guide if you would like to report a bug, ask a question, or help us with coding.
Help us keep Cryptomator open and inclusive. Please read and follow our Code of Conduct.
This project is dual-licensed under the AGPLv3 for FOSS projects as well as a commercial license derived from the LGPL for independent software vendors and resellers. If you want to use this library in applications that are not licensed under the AGPL, feel free to contact our sales team.
