diff --git a/backend/pom.xml b/backend/pom.xml
index 7dcbff00a7cdb7c9164d2b4a7728def31b47edde..cb9e582c8ae9c838220e3cd4c70edb71f361f64b 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -38,8 +38,6 @@
 			<groupId>jakarta.persistence</groupId>
 			<artifactId>jakarta.persistence-api</artifactId>
 		</dependency>
-
-
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-test</artifactId>
@@ -55,6 +53,10 @@
 			<artifactId>maven-model</artifactId>
 			<version>${maven-model.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-security</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/backend/src/main/java/hu/pazmany/UserService.java b/backend/src/main/java/hu/pazmany/UserService.java
index ee97f97743f673ef89194c63c0ffb31056c8b1e3..71adee586ec5f945d0dc8b6e5b796e199456bda5 100644
--- a/backend/src/main/java/hu/pazmany/UserService.java
+++ b/backend/src/main/java/hu/pazmany/UserService.java
@@ -1,19 +1,21 @@
 package hu.pazmany;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
 @Service
 public class UserService {
     private final UserRepository userRepository;
+    private final BCryptPasswordEncoder passwordEncoder;
 
-    public UserService(UserRepository userRepository) {
+    public UserService(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder) {
         this.userRepository = userRepository;
+        this.passwordEncoder = passwordEncoder;
     }
 
     public String authenticate(String username, String password) {
         User user = userRepository.findByUsername(username);
-        if (user != null && user.getPassword().equals(password)) {
+        if (user != null && passwordEncoder.matches(password, user.getPassword())) {
             return user.getFullName();
         }
         return "Helytelen felhasználónév vagy jelszó!";
@@ -23,7 +25,7 @@ public class UserService {
         User user = new User();
         user.setFullName(fullName);
         user.setUsername(username);
-        user.setPassword(password);
+        user.setPassword(passwordEncoder.encode(password));
         userRepository.save(user);
     }
 }
diff --git a/backend/src/main/java/hu/pazmany/config/SecurityConfig.java b/backend/src/main/java/hu/pazmany/config/SecurityConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..2705a86f05bc8ddabd45c1df95cfef84a8c71241
--- /dev/null
+++ b/backend/src/main/java/hu/pazmany/config/SecurityConfig.java
@@ -0,0 +1,12 @@
+package hu.pazmany.config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
+@Configuration
+public class SecurityConfig {
+    @Bean
+    public BCryptPasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+}
diff --git a/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java b/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java
index 7a289136f6e2cc159c4f2a01feb92b06990836cf..c5ccb07a46305963fa40a47fbd18d4758bc8fb61 100644
--- a/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java
+++ b/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java
@@ -23,16 +23,23 @@ public class DocumentRepositoryTests {
 
     @Test
     public void testFindAllByUser() {
+        // Create a new User
         User user = new User();
         user.setUsername("testUser");
         user.setPassword("testPassword");
+
+        // Save the User
         userRepository.save(user);
 
+        // Create a new Subject
         Subject subject = new Subject();
         subject.setSubjectId("testId");
         subject.setName("testName");
+
+        // Save the Subject
         subjectRepository.save(subject);
 
+        // Create and save Documents
         int n = 4;
         for (int i = 0; i < n; i++) {
             Document document = new Document();
@@ -43,9 +50,13 @@ public class DocumentRepositoryTests {
             documentRepository.save(document);
         }
 
+        // Retrieve all Documents by User
         List<Document> documents = documentRepository.findAllByUser(user);
 
+        // Assert that the retrieved Documents has the correct size
         assertThat(documents).hasSize(n);
+
+        // Assert that the retrieved Documents are all from the same User
         for (int i = 0; i < n; i++) {
             assertThat(documents.get(i).getUser().getUsername()).isEqualTo(user.getUsername());
         }
@@ -53,16 +64,23 @@ public class DocumentRepositoryTests {
 
     @Test
     public void testFindAllBySubject() {
+        // Create a new Subject
         Subject subject = new Subject();
         subject.setSubjectId("testId");
         subject.setName("testName");
+
+        // Save the Subject
         subjectRepository.save(subject);
 
+        // Create a new User
         User user = new User();
         user.setUsername("testUser");
         user.setPassword("testPassword");
+
+        // Save the User
         userRepository.save(user);
 
+        // Create and save Documents
         int n = 4;
         for (int i = 0; i < n; i++) {
             Document document = new Document();
@@ -73,9 +91,13 @@ public class DocumentRepositoryTests {
             documentRepository.save(document);
         }
 
+        // Retrieve all Documents by Subject
         List<Document> documents = documentRepository.findAllBySubject(subject);
 
+        // Assert that the retrieved Documents has the correct size
         assertThat(documents).hasSize(n);
+
+        // Assert that the retrieved Documents are all from the same Subject
         for (int i = 0; i < n; i++) {
             assertThat(documents.get(i).getSubject().getSubjectId()).isEqualTo(subject.getSubjectId());
         }
@@ -83,25 +105,36 @@ public class DocumentRepositoryTests {
 
     @Test
     public void testFindById() {
+        // Create a new Subject
         Subject subject = new Subject();
         subject.setSubjectId("testId");
         subject.setName("testName");
+
+        // Save the Subject
         subjectRepository.save(subject);
 
+        // Create a new User
         User user = new User();
         user.setUsername("testUser");
         user.setPassword("testPassword");
+
+        // Save the User
         userRepository.save(user);
 
+        // Create the Document
         Document document = new Document();
         document.setUser(user);
         document.setSubject(subject);
         document.setTitle("testTitle");
         document.setFilepath("testFilepath");
+
+        // Save the Document
         documentRepository.save(document);
 
+        // Retrieve the Document
         Document found = documentRepository.findById(document.getId()).get();
 
+        // Assert that the retrieved Document is the same as the one we saved
         assertThat(found.getTitle()).isEqualTo(document.getTitle());
     }
 }
\ No newline at end of file
diff --git a/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java b/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java
index 6b327b48e4d78ce069c64614c69597a7443f9551..050074387b037501b80f65aacddf20b85a03c190 100644
--- a/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java
+++ b/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java
@@ -17,24 +17,33 @@ public class SubjectRepositoryTests {
 
     @Test
     public void testFindBySubjectId() {
+        // Create a new Subject
         Subject subject = new Subject();
         subject.setSubjectId("testId");
         subject.setName("testName");
+
+        // Save the Subject
         subjectRepository.save(subject);
 
+        // Retrieve the Subject
         Subject found = subjectRepository.findBySubjectId(subject.getSubjectId());
 
+        // Assert that the retrieved Subject is the same as the one we saved
         // Ids have to be compared, as the objects differ, even if their data does not
         assertThat(found.getSubjectId()).isEqualTo(subject.getSubjectId());
     }
 
     @Test
     public void testFindAll() {
+        // Create a new Subject
         Subject subject = new Subject();
         subject.setSubjectId("testId");
         subject.setName("testName");
+
+        // Save the Subject
         subjectRepository.save(subject);
 
+        // Create and save more Subjects
         int n = 4;
         for (int i = 0; i < n; i++) {
             Subject tempSubject = new Subject();
@@ -43,10 +52,13 @@ public class SubjectRepositoryTests {
             subjectRepository.save(tempSubject);
         }
 
+        // Retrieve all Subjects
         List<Subject> subjects = subjectRepository.findAll();
 
+        // Assert that the retrieved Subjects has the correct size
         assertThat(subjects).hasSize(n+1);
 
+        // Assert that the retrieved Subjects contain the one we saved
         assertThat(subjects.get(0).getSubjectId()).isEqualTo(subject.getSubjectId());
     }
 }
\ No newline at end of file
diff --git a/backend/src/test/java/hu/pazmany/UserServiceTests.java b/backend/src/test/java/hu/pazmany/UserServiceTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..d13c1f73f0acab229ef25e6655891b0e3e06f9bd
--- /dev/null
+++ b/backend/src/test/java/hu/pazmany/UserServiceTests.java
@@ -0,0 +1,49 @@
+package hu.pazmany;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.test.annotation.DirtiesContext;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+public class UserServiceTests {
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private BCryptPasswordEncoder passwordEncoder;
+
+    @Test
+    public void testRegister() {
+        // Register a new user
+        userService.register("Test User", "testUser", "testPassword");
+
+        // Retrieve the user
+        User user = userRepository.findByUsername("testUser");
+
+        // Assert that the user was saved and the password was encrypted
+        assertThat(user).isNotNull();
+        assertThat(user.getUsername()).isEqualTo("testUser");
+        assertThat(passwordEncoder.matches("testPassword", user.getPassword())).isTrue();
+    }
+
+    @Test
+    public void testAuthenticate() {
+        // Register a new user
+        userService.register("Test User", "testUser", "testPassword");
+
+        // Authenticate the user
+        String fullName = userService.authenticate("testUser", "testPassword");
+
+        // Assert that the user was authenticated successfully
+        assertThat(fullName).isEqualTo("Test User");
+    }
+}
\ No newline at end of file