Безопасность API: использование хеширования для поддержания целостности данных между клиентом и серверомAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Безопасность API: использование хеширования для поддержания целостности данных между клиентом и сервером

Сообщение Anonymous »

У меня есть клиент Android, который отправляет данные JSON на мой сервер приложений Spring Boot.signUpUserRequest = new SignUpUserRequest(
lastName.getText().toString(),
Long.valueOf(phoneNumber.getText().toString().trim()),
emailAddress.getText().toString(),
Config.getAndroidId(this),
Type.INDIVIDUAL.toString(),
firstName.getText().toString(),
Config.ToBase64Encode(confirmPassword.getText().toString())
);
signUpUserRequest.setHash(Config.HashString(signUpUserRequest.toDataString().trim()));
< /code>

Ниже приведен shivupuserRequest < /code> pojo (сеттеры и полученные сняты для краткости) < /p>

public class SignUpUserRequest {

private String firstName;

private String lastName;

private long phoneNumber;

private String type;

private String email;

private String password;

private String phoneId;

private String hash;

public SignUpUserRequest(String lastName, Long phoneNumber, String email, String phoneId, String type, String firstName, String password) {
this.lastName = lastName;
this.phoneNumber = phoneNumber;
this.email = email;
this.phoneId = phoneId;
this.type = type;
this.firstName = firstName;
this.password = password;
}
.... setters and getters removed ....

public String toDataString() {
return "SignUpUserRequest{" + "firstName=" + firstName + ", lastName=" + lastName + ", phoneNumber=" + phoneNumber + ", type=" + type + ", email=" + email + ", password=" + password + ", phoneId=" + phoneId + '}';
}

@Override
public String toString() {
return "SignUpUserRequest{" + "firstName=" + firstName + ", lastName=" + lastName + ", phoneNumber=" + phoneNumber + ", type=" + type + ", email=" + email + ", password=" + password + ", phoneId=" + phoneId + ", hash=" + hash + '}';
}
< /code>

Проблема, которая у меня есть, заключается в том, что когда я отправляю JSON в свое приложение Spring Boot, а затем выполняю проверку целостности в данных запроса, хэш, сгенерированный на стороне сервера, всегда отличается от хэш, сгенерированного на стороне клиента. public ResponseEntity getSignupSessionJWTToken(@RequestBody SignUpUserRequest request) {
Response response = new Response();
String hashString = Config.HashString(request.toDataString().trim());

if (hashString.equals(request.getHash())) {
...... do anything here .....
}else{
..... integrity exception ....
}
< /code>

Итак, мой вопрос - это правильный подход?
Я делаю что -то в основном неправильно и насколько лучше я могу достичь целостности данных между моим клиентом и сервером.public static String HashString(String text) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.trim().getBytes("UTF-8"));
Log.i("CONFIG", "HASHING TEXT = " + ToBase64Encode(hash));
return ToBase64Encode(hash);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, ex);
return "";
} catch (UnsupportedEncodingException e) {
Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, e);
return "";
}
}

public static String ToBase64Encode(byte[] originalInput) {
return new String(Base64.encodeToString(originalInput, Base64.DEFAULT));
}
< /code>

реализация hashstring < /code> (Springboot) < /p>

public static String HashString(String text) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
// System.out.println("Compare this = " + ToBase64Encode(hash));
return Base64.getEncoder().encodeToString(hash);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(RiceHelper.class.getName()).log(Level.SEVERE, null, ex);
return "";
}
}


Подробнее здесь: https://stackoverflow.com/questions/541 ... -and-serve
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»