Как добиться шифрования и дешифрования в Java

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

-2
задан rohan 11 April 2019 в 09:33
поделиться

2 ответа

Я на самом деле приятно удивлен, кто-то спросил, прежде чем сделать это неправильно.

Однако, то, что вы спрашиваете, довольно широко для одного ответа. Я бы посоветовал пройти хотя бы какой-нибудь базовый курс по криптографии (я бы порекомендовал Coursera . Даже если вы не закончите свой курс, вы получите довольно хорошие основы, что и почему вы должны или не должны делать) не делать.

простое приложение для входа в систему, где мне нужно хранить значения в БД

Если значения вы имеете в виду пароли пользователей, то используйте хеш с медленным засолением, пожалуйста, прочтите [ 112] https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/

Если вы хотите зашифровать некоторые значения обратимы, существует множество примеров, хотя не все они безопасны,

Код будет очень полезным

, вы можете проверить https: // gusto77.wordpress.com/2017/10/30/encryption-reference-project/

что такое алгоритм, ключ, отступы и почему мы должны использовать getBytes ().

Я начну с байтов. Шифрование работает с байтовыми массивами. Так что для любого xt вам нужно конвертировать ваши данные, ключи, пароли, .. в байтовые массивы. Также зашифрованные данные являются байтовыми массивами.

Для алгоритма, заполнения, .. Я действительно советую вам узнать об этом немного больше самостоятельно.

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

Просто для примера, обычно используется AES/CBC/PKCS5Padding

.Можно ввести предопределенное фиксированное слово или мы можем установить наш собственный ключ. [ 1121]

Ключ - это ваше секретное значение, вам нужен тот же ключ для расшифровки зашифрованных данных, но ключ ваш, лучше всего, если он случайный

0
ответ дан gusto2 11 April 2019 в 09:33
поделиться

Я новичок в этом вопросе, так что я просто рекомендую хэшировать и складывать пароли, я не могу предложить намного больше понимания, но я нашел это видео , которое я нашел довольно обширным и интересным по этому вопросу, и даже он показывает некоторые примеры кода и примеры, я рекомендую начинать с этого и возвращаться с сомнениями из этого!

Общая суть вещей - получить исходную строку пароля и сгенерировать случайную строку с ней, объединяя оба, затем хешируя их объединенную форму и сохраняя хешированную форму обоих и случайную строку, затем, когда этот человек собирается войти в систему, вы применяете ту же самую соль к вставленному паролю и сравниваете ее с хешированной формой в вашем базы данных.

Это имеет преимущества перед стандартным хэшированием, потому что случайная строка уникальна для каждого пользователя, то есть все хэши, даже с одинаковыми паролями, будут разными, тогда как при обычном хешировании вы получите одинаковый хеш для тех же паролей, и, таким образом было бы проще взломать некоторые, если бы у многих пользователей был один и тот же пароль, что нельзя сделать в этом случае, поскольку каждый хеш-ключ отличается.

Итак, запомните, сгенерируйте случайную строку, скомпонуйте ее, хэшируйте конкататированную строку, сохраните хэш и случайную строку в БД и сравните при входе в систему.

0
ответ дан Skye 11 April 2019 в 09:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: