Безопасность Spring шифрует MD5

Я всегда использую системные типы - например, Int32 вместо интервала. Я принял эту практику после чтения Прикладное Программирование Платформы.NET - автор Jeffrey Richter делает хороший случай для использования полных имен типов. Вот две точки, которые придерживались меня:

  1. Имена типов могут варьироваться между языками.NET. Например, в C#, long карты к Системе. Int64, в то время как в C++ с управляемыми расширениями, long карты к Int32. Так как языки могут быть смешаны-и-подобраны при использовании.NET, можно быть уверены, что использование явного имени класса всегда будет более четким, неважно, предпочтительный язык читателя.

  2. Много методов платформы имеют имена типов как часть их имен методов:

    BinaryReader br = new BinaryReader( /* ... */ );

    float val = br.ReadSingle(); // OK, but it looks a little odd...

    Single val = br.ReadSingle(); // OK, and is easier to read

16
задан Martin Thorsen Ranang 13 November 2015 в 20:16
поделиться

3 ответа

Как вы создаете свои хэши MD5? Что-то вроде следующего хорошо работает в Java:

MessageDigest messageDigest = MessageDigest.getInstance("MD5");  
messageDigest.update(user.getPassword().getBytes(),0, user.getPassword().length());  
String hashedPass = new BigInteger(1,messageDigest.digest()).toString(16);  
if (hashedPass.length() < 32) {
   hashedPass = "0" + hashedPass; 
}

Когда вы кодируете «коала», вы получаете «a564de63c2d0da68cf47586ee05984d7»?

6
ответ дан 30 November 2019 в 15:23
поделиться

Have you read 6.3.3 Hashing and Authentication section from Spring Security reference manual? It mentioned some possible issues that you might encounter in using password hashing.

Some possibilities it listed:

  • Database password hash might be in Base64, while the result from MD5PasswordEncoder is in hexadecimal strings
  • Your password hash might be in upper-case, while the result from the encoder is in lower case strings
5
ответ дан 30 November 2019 в 15:23
поделиться

Я понимаю, что это немного поздно, но Spring имеет встроенные классы, которые значительно упрощают это.

@Test
public void testSpringEncoder() {
    PasswordEncoder encoder = new Md5PasswordEncoder();
    String hashedPass = encoder.encodePassword("koala", null);

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

Это модульный тест, который я написал с использованием встроенного кода Spring Security, он намного меньше кода MessageDigest, и, поскольку вы уже используете Spring Security, у вас уже должны быть классы в пути к классам.

47
ответ дан 30 November 2019 в 15:23
поделиться
Другие вопросы по тегам:

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