subroutine atbash ( plain, crypt ) !*****************************************************************************80 ! !! atbash () encrypts or decrypts a string using the ATBASH code. ! ! Discussion: ! ! Only the alphabetic characters will be encrypted. ! ! Licensing: ! ! This code is distributed under the MIT license. ! ! Modified: ! ! 29 August 2021 ! ! Author: ! ! John Burkardt ! ! Input: ! ! character ( len = * ) PLAIN, the string to be encrypted. ! ! Output: ! ! character ( len = * ) CRYPT, the encrypted version of the string. ! implicit none integer big_a integer big_z character ( len = * ) crypt integer i integer j integer n character ( len = * ) plain integer plain_i integer small_a integer small_z ! ! How long is the plain text? ! n = len ( plain ) ! ! Initialize the encrypted string to the plain text. This way, ! nonalphabetic characters are passed through. ! crypt = plain ! ! Determine the numeric equivalents of the endpoints of the A-Z and a-z intervals. ! small_a = ichar ( 'a' ) small_z = ichar ( 'z' ) big_a = ichar ( 'A' ) big_z = ichar ( 'Z' ) ! ! Convert plain text characters to unsigned integers, ! and reverse the index. ! do i = 1, n plain_i = ichar ( plain(i:i) ) if ( small_a <= plain_i .and. plain_i <= small_z ) then j = small_a + small_z - plain_i crypt(i:i) = char ( j ); else if ( big_a <= plain_i .and. plain_i <= big_z ) then j = big_a + big_z - plain_i crypt(i:i) = char ( j ) end if end do return end