-
Notifications
You must be signed in to change notification settings - Fork 1
/
day_12_caeser_cipher.go
66 lines (61 loc) · 1.42 KB
/
day_12_caeser_cipher.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"fmt"
"strings"
)
func Encrypt(str string, key int) string {
if err := checkKey(key); err != nil {
fmt.Println("Error: ", err.Error())
return ""
}
shift := rune(key)
dec := strings.Map(func(r rune) rune {
if r >= 'a' && r <= 'z'-shift || r >= 'A' && r <= 'Z'-shift {
return r + shift
} else if r > 'z'-shift && r <= 'z' || r > 'Z'-shift && r <= 'Z' {
return r + shift - 26
}
return r
}, str)
return dec
}
func Decrypt(str string, key int) string {
if err := checkKey(key); err != nil {
fmt.Println("Error: ", err.Error())
return ""
}
shift := rune(key)
dec := strings.Map(func(r rune) rune {
if r >= 'a'+shift && r <= 'z' || r >= 'A'+shift && r <= 'Z' {
return r - shift
} else if r >= 'a' && r < 'a'+shift || r >= 'A' && r < 'A'+shift {
return r - shift + 26
}
return r
}, str)
return dec
}
func checkKey(k int) error {
if k <= 26 {
return nil
}
return fmt.Errorf("Invalid key\n 0 <= Key <= 26")
}
func main() {
var msg string
var key int
var mode rune
fmt.Println("Enter text to encrypt\\decrypt")
fmt.Scanf("%s\n", &msg)
fmt.Println("Enter key")
fmt.Scanf("%d\n", &key)
fmt.Println("Enter 'e' to encrypt or 'd' to decrypt")
fmt.Scanf("%c", &mode)
if mode == rune('e') {
fmt.Println("Encrypted Message: ", Encrypt(msg, key))
} else if mode == rune('d') {
fmt.Println("Deccrypted Message: ", Decrypt(msg, key))
} else {
fmt.Println("Unknown mode")
}
}