48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package otpdecrypt
|
|
|
|
import (
|
|
"strings"
|
|
"one-time-pad-utils/pad_definitions"
|
|
)
|
|
|
|
func OTPDecrypt(message string, key string) string {
|
|
message = strings.Replace(message, " ", "", -1)
|
|
messagesplit := strings.Split(message,"")
|
|
var messagesplitint []int
|
|
|
|
key = strings.Replace(key, " ", "", -1)
|
|
keysplit := strings.Split(key,"")
|
|
var keysplitint []int
|
|
|
|
for _, char := range messagesplit {
|
|
for n, c := range paddefinitions.NumToCharMap{
|
|
if c == strings.ToUpper(char) {
|
|
messagesplitint = append(messagesplitint, n)
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
for _, char := range keysplit {
|
|
for n, c := range paddefinitions.NumToCharMap{
|
|
if c == strings.ToUpper(char) {
|
|
keysplitint = append(keysplitint, n)
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(keysplitint) < len(messagesplitint) {
|
|
return ("KEY TOO SHORT TO DECRYPT MESSAGE")
|
|
}
|
|
|
|
var decryptedmessage []string
|
|
|
|
for pos, messagenum := range messagesplitint{
|
|
decryptedmessage = append(decryptedmessage, paddefinitions.NumToCharMap[(((messagenum - keysplitint[pos]) % 35) + 35) % 35]) // crazy modulo for decryption
|
|
|
|
}
|
|
|
|
return (strings.Join(decryptedmessage, ""))
|
|
}
|