diff --git a/core-java-modules/core-java-security-2/pom.xml b/core-java-modules/core-java-security-2/pom.xml
index 9315ab4af2..5db3b67c04 100644
--- a/core-java-modules/core-java-security-2/pom.xml
+++ b/core-java-modules/core-java-security-2/pom.xml
@@ -17,6 +17,7 @@
+
commons-codec
commons-codec
@@ -36,6 +37,15 @@
${assertj-core.version}
test
+
+
+
+ javax.xml.bind
+ jaxb-api
+ 2.3.1
+
+
+
@@ -46,4 +56,5 @@
3.10.0
+
diff --git a/core-java-modules/core-java-security-2/src/main/java/com/baeldung/checksums/ChecksumUtils.java b/core-java-modules/core-java-security-2/src/main/java/com/baeldung/checksums/ChecksumUtils.java
new file mode 100644
index 0000000000..d214a0f757
--- /dev/null
+++ b/core-java-modules/core-java-security-2/src/main/java/com/baeldung/checksums/ChecksumUtils.java
@@ -0,0 +1,23 @@
+package com.baeldung.checksums;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.CRC32;
+import java.util.zip.CheckedInputStream;
+import java.util.zip.Checksum;
+
+public class ChecksumUtils {
+
+ public static long getChecksumCRC32(byte[] bytes) {
+ Checksum crc32 = new CRC32();
+ crc32.update(bytes, 0, bytes.length);
+ return crc32.getValue();
+ }
+
+ public static long getChecksumCRC32(InputStream stream, int bufferSize) throws IOException {
+ CheckedInputStream checkedInputStream = new CheckedInputStream(stream, new CRC32());
+ byte[] buffer = new byte[bufferSize];
+ while (checkedInputStream.read(buffer, 0, buffer.length) >= 0) {}
+ return checkedInputStream.getChecksum().getValue();
+ }
+}
diff --git a/core-java-modules/core-java-security-2/src/test/java/com/baeldung/checksums/ChecksumUtilsUnitTest.java b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/checksums/ChecksumUtilsUnitTest.java
new file mode 100644
index 0000000000..f5366917f6
--- /dev/null
+++ b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/checksums/ChecksumUtilsUnitTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.checksums;
+
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ChecksumUtilsUnitTest {
+
+ byte[] arr;
+
+ @Before
+ void setUp() {
+ arr = new byte[]{0,10,21,20,35,40,120,56,72,22};
+ }
+
+ @Test
+ void givenByteArray_whenChecksumCreated_checkCorrect() {
+
+ long checksum = ChecksumUtils.getChecksumCRC32(arr);
+
+ assertEquals(3915397664L, checksum);
+ }
+
+ @Test
+ void givenTwoDifferentStrings_whenChecksumCreated_checkCollision() {
+
+ String plumless = "plumless";
+ String buckeroo = "buckeroo";
+
+ long plumlessChecksum = ChecksumUtils.getChecksumCRC32(plumless.getBytes());
+ long buckerooChecksum = ChecksumUtils.getChecksumCRC32(buckeroo.getBytes());
+
+ assertEquals(plumlessChecksum, buckerooChecksum);
+ }
+
+ @Test
+ void givenInputString_whenChecksumCreated_checkCorrect() throws IOException {
+
+ InputStream inputStream = new ByteArrayInputStream(arr);
+ long checksum = ChecksumUtils.getChecksumCRC32(inputStream, 10);
+
+ assertEquals(3915397664L, checksum);
+
+ }
+}
\ No newline at end of file