gina's portfolio
Back to featured projects

Secure software development

Secure Hashing Web Service

I refactored a Spring Boot web service to strengthen data integrity, encrypted communication, certificate management, and dependency security. The finished service generates SHA-256 checksums through an HTTPS endpoint and uses repeatable security testing to evaluate its supporting libraries.

  • Java
  • Spring Boot
  • SHA-256
  • HTTPS
  • SSL/TLS
  • OWASP Dependency-Check
Blue security shield protecting a server as encrypted data passes through it

Defense in depth

Hashing, encrypted transport, certificate management, and dependency analysis work together to reduce risk across the service.

Overview

Strengthening an existing service without changing its purpose

The project focused on secure refactoring. I preserved the application's core behavior while improving how it protects data, communicates over the network, manages cryptographic material, and evaluates third-party components.

Security objective

Confidentiality, integrity, and resilience

The solution combines a strong hashing algorithm, protected communication, secure key storage, and vulnerability analysis to address several layers of application security.

Security architecture

Four complementary protection layers

01

Data integrity

SHA-256 creates a fixed 256-bit digest for submitted data, making unexpected changes easy to detect.

02

Encrypted transport

HTTPS and SSL/TLS protect application traffic while it travels between the client and the service.

03

Certificate management

A Java keystore stores the certificate and private-key material used to enable the secured endpoint.

04

Dependency analysis

OWASP Dependency-Check identifies known risks in third-party libraries and supports repeatable security reviews.

Implementation process

Refactor, configure, scan, and verify

01

Reviewed the existing Spring Boot service and identified security requirements

02

Added a SHA-256 hashing routine with Java MessageDigest

03

Created and configured a Java keystore for SSL/TLS communication

04

Moved the service to an HTTPS endpoint

05

Ran OWASP Dependency-Check against the project dependencies

06

Repeated functional and dependency testing after the security changes

Testing & validation

Verifying security and functionality together

Hash verification

Confirmed that the endpoint consistently returned a SHA-256 checksum for the supplied input.

Secure communication

Verified that the application could run through its configured HTTPS endpoint.

Regression testing

Re-executed the refactored application to confirm that the security changes preserved its original behavior.

Dependency review

Compared repeated OWASP reports to confirm that the refactoring introduced no additional dependency findings.

Security testing evidence

Dependency analysis before and after refactoring

The reports document the dependency baseline and follow-up scan. Only project-level testing information is shown; personal, certificate, browser, and environment details have been excluded.

Initial OWASP Dependency-Check report for the Spring Boot SSL server

Initial dependency scan

The first OWASP Dependency-Check report established a baseline for known third-party dependency findings.

Follow-up OWASP Dependency-Check report for the Spring Boot SSL server

Follow-up dependency scan

A second scan verified that the secure refactoring did not introduce additional dependency findings.

Secure coding practices

Building security into the development process

  • Use current, well-supported cryptographic algorithms
  • Protect data in transit with authenticated encryption
  • Store key material in a dedicated keystore
  • Validate input before processing it
  • Handle errors without exposing implementation details
  • Apply least-privilege access in production environments

Cryptographic reasoning

Choosing algorithms for distinct responsibilities

SHA-256 supports integrity by producing a deterministic digital fingerprint, while AES-256 is appropriate when confidentiality requires reversible encryption. Secure random values, protected key exchange, and careful keystore management are equally important because a strong algorithm alone does not secure the complete system.

Project outcome

A more secure service supported by repeatable evidence

The completed project demonstrates my ability to apply cryptographic controls, configure encrypted communication, manage certificates, review third-party risk, and verify that security improvements preserve application functionality.