Не используйте ase-128-cbc, используйте ase-128-ecb.
hashpwd = echo -n $password| openssl sha1 | sed 's#.*=\\s*##g' | cut -c 1-32
openssl enc -aes-128-ecb -salt -in -out -K $ hashpwd
Код Java здесь:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
//openssl enc -nosalt -aes-128-ecb
// -in <input file>
// -out <output file>
// -K <16 bytes in hex, for example : "abc" can be hashed in SHA-1, the first 16 bytes in hex is a9993e364706816aba3e25717850c26c>
private final static String TRANSFORMATION = "AES"; // use aes-128-ecb in openssl
public static byte[] encrypt(String passcode, byte[] data) throws CryptographicException {
try {
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, genKeySpec(passcode));
return cipher.doFinal(data);
} catch (Exception ex) {
throw new CryptographicException("Error encrypting", ex);
}
}
public static String encryptWithBase64(String passcode, byte[] data) throws CryptographicException {
return new BASE64Encoder().encode(encrypt(passcode, data));
}
public static byte[] decrypt(String passcode, byte[] data) throws CryptographicException {
try {
Cipher dcipher = Cipher.getInstance(TRANSFORMATION);
dcipher.init(Cipher.DECRYPT_MODE, genKeySpec(passcode));
return dcipher.doFinal(data);
} catch (Exception e) {
throw new CryptographicException("Error decrypting", e);
}
}
public static byte[] decryptWithBase64(String passcode, String encrptedStr) throws CryptographicException {
try {
return decrypt(passcode, new BASE64Decoder().decodeBuffer(encrptedStr));
} catch (Exception e) {
throw new CryptographicException("Error decrypting", e);
}
}
public static SecretKeySpec genKeySpec(String passcode) throws UnsupportedEncodingException, NoSuchAlgorithmException {
byte[] key = passcode.getBytes("UTF-8");
MessageDigest sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16); // use only first 128 bit
return new SecretKeySpec(key, TRANSFORMATION);
}
Протестировано и передано в jdk6 и jdk8.
Обычно Вы хотите использовать отдельный репозиторий в любом случае, где Вы ожидаете различные права доступа (т.е. некоторые разработчики должны иметь, передают доступ к одному проекту, но не другому, или один проект имеет общедоступный анонимный интерфейс только для чтения, но другой не делает).
Вы хотите все в одном репозитории, если Вам не нужен тот уровень управления доступом, особенно если необходимо быть в состоянии скопировать или переместить файлы между проектами (т.е. проекты могли бы совместно использовать код).
Помещенный Ваше магистральный/тег/ответвление разделение в любой уровень соответствует блоку кода, который Вы могли бы выпустить как единственный пакет (т.е. думать, где Вы отметите). Это не очень важно для разбираний сначала, начиная с них не отличающихся внутренне от любой другой папки, таким образом, можно просто переместить вещи позже, хотя, конечно, это более опрятно для не имения той проблемы.
Ваша структура репозитория будет несколько уникальна для Вашего бизнеса, и это - продукты. Мы сохраняем наш в одном репозитории. Наша структура несколько как это.
Мы используем один большой репозиторий, и просто структурировали все в подпапках (/project1,/project2 и т.д.), и это, кажется, хорошо работает.
проект Apache имеет огромный репозиторий SVN , и это, кажется, делает OK для них!:)
С точки зрения организации, структура Вы дали довольно разумные взгляды. Я думаю, что что-либо идет, в значительной степени, пока это рационально (т.е. спутывание каждого инструмента с каждым проектом является, вероятно, плохой идеей и т.д.). Так выберите что-то, что работает на Вас (инструменты/, проекты / и т.д.). Подрывная деятельность имеет довольно хорошую поддержку того, чтобы переместить вещи в репозитории также, таким образом, можно всегда изменяться при необходимости.
У нас есть единственный repo, это структурировано как этот. Что-либо, что работается на больше, чем несколькими людьми и/или в активной разработке, настраивается с соединительной линией/, отмечает ответвление / / под основной папкой.
Мы, вероятно, поместили бы тех магистральное ответвление тегов folderset под каждой подпапкой, которую Вы перечислили, кроме, возможно, библиотеки или два, которые не находятся в активной разработке.
У нас есть отдельные репозитории для каждого проекта; но главная причина - в доступе, плюс, если клиенту нужна копия его источника, мы можем передать его с историей без особой суеты. Если вы посмотрите на конфигурационные файлы в conf, то не так сложно найти универсальный конфигурационный файл, который будет работать для всех ваших проектов. Мы делаем это так:
[general]
anon-access = none
auth-access = write
password-db = ../../conf/passwd
authz-db = ../../conf/authz
authz:
[groups]
AOS = nathan,mark
[AOS:/]
@AOS = rw
frew = rw
и затем, конечно, passwd:
[users]
frew = password
nathan = awesome
mark = station
Попытайтесь сохранить материал, к которому регулярно получают доступ (код, сценарии) отдельный от 'неперезаписываемый и передать для резервного копирования' материал. Необходимость к контролю/обновлению тысячи jpegs только для изменения нескольких строк кода становится тусклой очень быстро.