Nano Hash - криптовалюты, майнинг, программирование

Шифрование с помощью BlowFish в Java

Следующий код отлично работает для меня, чтобы зашифровать строку с помощью шифрования BlowFish.

          // create a key generator based upon the Blowfish cipher
    KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");

    // create a key
    SecretKey secretkey = keygenerator.generateKey();

    // create a cipher based upon Blowfish
    Cipher cipher = Cipher.getInstance("Blowfish");

    // initialise cipher to with secret key
    cipher.init(Cipher.ENCRYPT_MODE, secretkey);

    // get the text to encrypt
    String inputText = "MyTextToEncrypt";

    // encrypt message
    byte[] encrypted = cipher.doFinal(inputText.getBytes());

Если я хочу определить свой собственный секретный ключ, как мне это сделать?

09.03.2011

Ответы:


1
   String strkey="MY KEY";
   SecretKeySpec key = new SecretKeySpec(strkey.getBytes("UTF-8"), "Blowfish");
        Cipher cipher = Cipher.getInstance("Blowfish");
        if ( cipher == null || key == null) {
            throw new Exception("Invalid key or cypher");
        }
        cipher.init(Cipher.ENCRYPT_MODE, key);
String encryptedData =new String(cipher.doFinal(to_encrypt.getBytes("UTF-8"));

ОПИСАНИЕ:

          SecretKeySpec key = new SecretKeySpec(strkey.getBytes("UTF-8"), "Blowfish");
         Cipher cipher = Cipher.getInstance("Blowfish");
         cipher.init(Cipher.DECRYPT_MODE, key);
         byte[] decrypted = cipher.doFinal(encryptedData);
         return new String(decrypted);
10.02.2016
  • Это решение небезопасно, поскольку оно напрямую использует строку в качестве криптографического ключа. 21.07.2016
  • @Robert Теперь, когда вы указали на проблему, может быть, объяснение того, что делать вместо этого, может быть более полезным. 18.02.2018
  • @ TheRealChx101: Короткий ответ: вам следует использовать функцию получения ключа, такую ​​​​как PBKDF2, bcrypt, scrypt или Argon2. Однако какой из них использовать в какой конфигурации, зависит от множества факторов. 18.02.2018

  • 2

    Размер ключа Blowfish должен быть от 32 до 448 бит. Таким образом, необходимо сделать массив байтов в соответствии с номером бита (4 байта для 32 бит) и наоборот.

    19.03.2013

    3

    Также вы можете попробовать это

    String key = "you_key_here";
    SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM);
    

    и немного больше здесь.

    02.08.2013

    4
  • Большое спасибо за быстрый ответ! 09.03.2011
  • @Erik также взгляните на мой вопрос .com/questions/38007478/ 24.06.2016
  • Это решение небезопасно, поскольку оно напрямую использует строку в качестве криптографического ключа. 21.07.2016
  • @ Роберт Да, очевидно. Однако обратите внимание на вопрос (Как определить ключевые данные) и как в ответе самым простым образом показано, как определить ключевые данные. Диссертация о том, как выбрать хорошие ключи, не имеет ничего общего с ответом, иллюстрирующим один конкретный синтаксический аспект того, как использовать конкретную реализацию. 21.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..