From 19bc1ed5691c060c145c1e7cca696f9bf5215db4 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 19 Feb 2015 18:54:31 +0100 Subject: [PATCH] using beginning of long filename instead of checksum --- .../crypto/aes256/Aes256Cryptor.java | 19 ++++++------------- .../crypto/aes256/FileNamingConventions.java | 4 ++-- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/Aes256Cryptor.java b/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/Aes256Cryptor.java index 89ac6d8ba..fe4f6eb72 100644 --- a/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/Aes256Cryptor.java +++ b/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/Aes256Cryptor.java @@ -27,7 +27,6 @@ import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.UUID; -import java.util.zip.CRC32; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; @@ -288,12 +287,6 @@ public class Aes256Cryptor extends AbstractCryptor implements AesCryptographicCo } } - private long crc32Sum(byte[] source) { - final CRC32 crc32 = new CRC32(); - crc32.update(source); - return crc32.getValue(); - } - @Override public String encryptPath(String cleartextPath, char encryptedPathSep, char cleartextPathSep, CryptorIOSupport ioSupport) { try { @@ -332,10 +325,10 @@ public class Aes256Cryptor extends AbstractCryptor implements AesCryptographicCo final String ivAndCiphertext = ENCRYPTED_FILENAME_CODEC.encodeAsString(encryptedBytes); if (ivAndCiphertext.length() + BASIC_FILE_EXT.length() > ENCRYPTED_FILENAME_LENGTH_LIMIT) { - final String crc32 = Long.toHexString(crc32Sum(ivAndCiphertext.getBytes())); - final String metadataFilename = crc32 + METADATA_FILE_EXT; + final String groupPrefix = ivAndCiphertext.substring(0, LONG_NAME_PREFIX_LENGTH); + final String metadataFilename = groupPrefix + METADATA_FILE_EXT; final LongFilenameMetadata metadata = this.getMetadata(ioSupport, metadataFilename); - final String alternativeFileName = crc32 + LONG_NAME_PREFIX_SEPARATOR + metadata.getOrCreateUuidForEncryptedFilename(ivAndCiphertext).toString() + LONG_NAME_FILE_EXT; + final String alternativeFileName = groupPrefix + metadata.getOrCreateUuidForEncryptedFilename(ivAndCiphertext).toString() + LONG_NAME_FILE_EXT; this.storeMetadata(ioSupport, metadataFilename, metadata); return alternativeFileName; } else { @@ -365,9 +358,9 @@ public class Aes256Cryptor extends AbstractCryptor implements AesCryptographicCo final String ciphertext; if (encrypted.endsWith(LONG_NAME_FILE_EXT)) { final String basename = StringUtils.removeEnd(encrypted, LONG_NAME_FILE_EXT); - final String crc32 = StringUtils.substringBefore(basename, LONG_NAME_PREFIX_SEPARATOR); - final String uuid = StringUtils.substringAfter(basename, LONG_NAME_PREFIX_SEPARATOR); - final String metadataFilename = crc32 + METADATA_FILE_EXT; + final String groupPrefix = basename.substring(0, LONG_NAME_PREFIX_LENGTH); + final String uuid = basename.substring(LONG_NAME_PREFIX_LENGTH); + final String metadataFilename = groupPrefix + METADATA_FILE_EXT; final LongFilenameMetadata metadata = this.getMetadata(ioSupport, metadataFilename); ciphertext = metadata.getEncryptedFilenameForUUID(UUID.fromString(uuid)); } else if (encrypted.endsWith(BASIC_FILE_EXT)) { diff --git a/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/FileNamingConventions.java b/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/FileNamingConventions.java index d7b594d64..e8a70849f 100644 --- a/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/FileNamingConventions.java +++ b/main/crypto-aes/src/main/java/org/cryptomator/crypto/aes256/FileNamingConventions.java @@ -48,9 +48,9 @@ interface FileNamingConventions { String LONG_NAME_FILE_EXT = ".lng.aes"; /** - * Prefix in file names > {@value #ENCRYPTED_FILENAME_LENGTH_LIMIT} chars used to determine the corresponding metadata file. + * Length of prefix in file names > {@value #ENCRYPTED_FILENAME_LENGTH_LIMIT} chars used to determine the corresponding metadata file. */ - String LONG_NAME_PREFIX_SEPARATOR = "_"; + int LONG_NAME_PREFIX_LENGTH = 8; /** * For metadata files for a certain group of files. The cryptor may decide what files to assign to the same group; hopefully using some