Sha256 Hashes in Fortran
Our program demonstrates how to compute SHA256 hashes in Fortran. SHA256 hashes are frequently used to compute short identities for binary or text blobs. For example, TLS/SSL certificates use SHA256 to compute a certificate’s signature.
program sha256_hashes
use iso_fortran_env, only: int8, int32
use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_loc, c_size_t
implicit none
interface
subroutine sha256_init() bind(c, name='SHA256_Init')
end subroutine sha256_init
subroutine sha256_update(data, len) bind(c, name='SHA256_Update')
import :: c_ptr, c_size_t
type(c_ptr), value :: data
integer(c_size_t), value :: len
end subroutine sha256_update
subroutine sha256_final(md) bind(c, name='SHA256_Final')
import :: c_ptr
type(c_ptr), value :: md
end subroutine sha256_final
end interface
character(len=:), allocatable :: s
integer(int8), dimension(32) :: hash
integer :: i
s = "sha256 this string"
! Initialize the SHA256 context
call sha256_init()
! Update the context with the input string
call sha256_update(c_loc(s), len(s))
! Finalize the hash
call sha256_final(c_loc(hash))
! Print the original string
print *, s
! Print the hash in hexadecimal format
write(*, '(*(Z2.2))', advance='no') hash
print *
end program sha256_hashesIn this Fortran implementation:
We use the
iso_fortran_envandiso_c_bindingmodules for interoperability with C libraries.We declare interfaces for the C functions
SHA256_Init,SHA256_Update, andSHA256_Finalfrom the OpenSSL library.We create a string
sthat we want to hash.We initialize the SHA256 context using
sha256_init().We update the context with our input string using
sha256_update().We finalize the hash using
sha256_final().Finally, we print the original string and the computed hash in hexadecimal format.
To compile and run this program, you’ll need to link against the OpenSSL library:
$ gfortran -o sha256_hashes sha256_hashes.f90 -lcrypto
$ ./sha256_hashes
sha256 this string
1af1dfa857bf1d8814fe1af8983c18080019922e557f15a8a...Note that if you need cryptographically secure hashes, you should carefully research hash strength!
Fortran doesn’t have built-in cryptographic functions like some other languages, so we’re using the OpenSSL library here. In a real-world scenario, you might want to use a Fortran-specific cryptography library or write more robust error handling and memory management.
Comments powered by Disqus