├── .gitignore ├── go.mod ├── main_test.go └── main.go /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .swp 3 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/cor/sindecrypt 2 | 3 | go 1.16 4 | -------------------------------------------------------------------------------- /main_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "testing" 6 | ) 7 | 8 | func TestEncryptIdentity(t *testing.T) { 9 | 10 | for k := 0; k < 100000; k++ { 11 | for x := 0; x <= 9; x++ { 12 | if decryptDigit(encryptDigit(x, k), k) != x { 13 | t.Fatalf("decryptDigit(encryptDigit(x, k), k) != x. %v %v", x, k) 14 | } 15 | } 16 | } 17 | } 18 | 19 | func TestCheckDigit(t *testing.T) { 20 | tt := 1_234_567_890 21 | 22 | fmt.Println(encrypt("0612345678")) 23 | 24 | correct1 := checkDigit(0, 9, 0, 0, tt) 25 | correct2 := checkDigit(6, 4, 0, 1, tt) 26 | 27 | if !correct1 { 28 | t.Fatalf("incorrect 1") 29 | } 30 | 31 | if !correct2 { 32 | t.Fatalf("incorrect 2") 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "math" 6 | "strconv" 7 | ) 8 | 9 | func main() { 10 | 11 | for t := 1_234_567_889; t <= 9_999_999_999; t++ { 12 | correct1 := checkDigit(0, 9, 0, 0, t) 13 | correct2 := checkDigit(6, 4, 0, 1, t) 14 | 15 | //correct3 := check(4, 0, 1, 1, t) 16 | //correct4 := check(3, 6, 1, 2, t) 17 | 18 | if correct1 && correct2 { 19 | //options = append(options, t) 20 | //fmt.Println(t) 21 | 22 | //fmt.Println(t) 23 | if t == 1_234_567_890 { 24 | fmt.Println("found") 25 | } 26 | } 27 | } 28 | } 29 | 30 | func digitKey(t int, i int, j int) int { 31 | s := math.Sin(float64(t + i)) 32 | k := getFloatDigit(s, j+1) 33 | return k 34 | } 35 | 36 | func encryptDigit(x int, k int) int { 37 | return (x + k) % 10 38 | } 39 | 40 | func decryptDigit(y int, k int) int { 41 | return (y - (k % 10) + 10) % 10 42 | } 43 | 44 | func checkDigit(x int, y int, i int, j int, t int) bool { 45 | k := digitKey(t, i, j) 46 | d := decryptDigit(y, k) 47 | 48 | return d == x 49 | } 50 | 51 | func getFloatDigit(number float64, digit int) int { 52 | return (int)(math.Abs(number)*math.Pow10(digit)) % 10 53 | } 54 | 55 | func encrypt(str_dMsg string) string { 56 | t := 1_234_567_890 57 | i := 0 58 | 59 | str_eMsg := "" 60 | 61 | for j := 0; j < len(str_dMsg); j++ { 62 | x := int(str_dMsg[j] - '0') 63 | 64 | k := digitKey(t, i, j) 65 | 66 | y := encryptDigit(x, k) 67 | 68 | str_eMsg += strconv.Itoa(y) 69 | } 70 | 71 | return str_eMsg 72 | } 73 | --------------------------------------------------------------------------------