comparison go/crypto.go @ 3:db4813125eb8

many changes.
author pyon@macmini
date Thu, 11 Oct 2018 22:11:09 +0900
parents d3b8cd5aeb70
children e3b10fb860b3
comparison
equal deleted inserted replaced
2:7fe3417cefc8 3:db4813125eb8
1 /* 1 /*
2 crypto.go : crypto-program. 2 crypto.go : crypto-program.
3 Version : 0.0 3 Version : 0.0
4 Last Change: 2018-09-30 Sun 16:47:45. 4 Last Change: 2018-10-11 木 13:54:56.
5 5
6 install to: rsearcher_root/ 6 install to: rsearcher_root/
7 server_root/ 7 server_root/
8 */ 8 */
9 package main 9 package main
10 10
11 import ( 11 import (
12 "crypto/aes"
13 "crypto/cipher"
14 "crypto/rand"
12 "crypto/sha256" 15 "crypto/sha256"
16 "encoding/csv"
17 "encoding/hex"
13 "fmt" 18 "fmt"
14 "flag" 19 "flag"
20 "io"
21 "io/ioutil"
22 "log"
15 "os" 23 "os"
16 ) 24 )
17 25
18 func main() { 26 func main() {
19 salt := flag.String( "s", "#!@-", "salt." ) 27 salt := flag.String( "s", "dummysalt", "salt." )
28
20 enca := flag.String( "a", "", "encrypt plaintext." ) 29 enca := flag.String( "a", "", "encrypt plaintext." )
21 encb := flag.String( "b", "", "encrypt csv-file." ) 30 encb := flag.String( "b", "", "encrypt csv-file." )
22 coll := flag.String( "c", "", "collate user/password." ) 31 coll := flag.String( "c", "", "collate user/password." )
23 32
24 decr := flag.String( "d", "", "deecrypt hhs." ) 33 decr := flag.String( "d", "", "deecrypt hhs." )
25 encr := flag.String( "e", "", "encrypt hhs." ) 34 encr := flag.String( "e", "", "encrypt hhs." )
26 chdb := flag.String( "f", "", "collate hhs." ) 35 ghhs := flag.String( "f", "", "get hhs info." )
27 chhs := flag.String( "g", "", "collate hhs." )
28 36
29 flag.Parse() 37 flag.Parse()
30 38
31 if *enca != "" { 39 if *enca != "" {
32 buf := *salt + enc_sha256( *enca ) + *salt 40 buf := *salt + enc_sha256( *enca ) + *salt
33 fmt.Println( enc_sha256( buf ) ) 41 fmt.Println( enc_sha256( buf ) )
34 os.Exit( 0 ) // done. 42 os.Exit( 0 ) // done.
35 } 43 }
36 44
37 if *encb != "" { 45 if *encb != "" {
38 r := csv.NewReader(strings.NewReader(in)) 46 f, err := os.Open( *encb ); if err != nil {
47 log.Fatal( err )
48 }
49 defer f.Close()
50
51 r := csv.NewReader( f )
39 for { 52 for {
40 record, err := r.Read() 53 record, err := r.Read()
41 if err == io.EOF { 54 if err == io.EOF {
42 break 55 break
43 } 56 }
44 if err != nil { 57 if err != nil {
45 log.Fatal( err ) 58 log.Fatal( err )
46 } 59 }
47 buf := *salt + enc_sha256( record[1] ) + *salt 60 buf := *salt + enc_sha256( record[ 1 ] ) + *salt
48 fmt.Println( record[0], ",", enc_sha256( buf ) ) 61 fmt.Println( record[ 0 ], enc_sha256( buf ) )
49 } 62 }
63 os.Exit( 0 ) // done.
50 } 64 }
51 65
52 if *coll != "" { 66 if *coll != "" {
67 f, err := os.Open( *coll ); if err != nil {
68 log.Fatal( err )
69 }
70 defer f.Close()
71
72 if flag.NArg() != 2 {
73 fmt.Fprintf( os.Stderr, "bad argument\n" )
74 os.Exit( 1 )
75 }
76 user := flag.Arg( 0 )
77 pw := flag.Arg( 1 )
78
79 r := csv.NewReader( f )
80 r.Comma = ' '
81 for {
82 record, err := r.Read()
83 if err == io.EOF {
84 break
85 }
86 if err != nil {
87 log.Fatal( err )
88 }
89
90 if record[ 0 ] == user {
91 buf := *salt + enc_sha256( pw ) + *salt
92 if record[ 1 ] == enc_sha256( buf ) {
93 fmt.Println( "valid" )
94 os.Exit( 39 )
95 }
96 }
97 }
98 os.Exit( 0 ) // done.
53 } 99 }
54 100
101 key, _ := hex.DecodeString( "f368616e676520746869732070617373" ) // len = 32
102
55 if *decr != "" { 103 if *decr != "" {
104 f, err := os.Open( *decr ); if err != nil {
105 log.Fatal( err )
106 }
107 defer f.Close()
108
109 ciphertext, err := ioutil.ReadAll( f )
110 if err != nil {
111 log.Fatal( err )
112 }
113
114 block, err := aes.NewCipher( key )
115 if err != nil {
116 panic( err )
117 }
118
119 iv := ciphertext[ :aes.BlockSize ]
120 plaintext := make( []byte, len( ciphertext ) - aes.BlockSize )
121 stream := cipher.NewCTR( block, iv )
122 stream.XORKeyStream( plaintext, ciphertext[ aes.BlockSize: ] )
123
124 fmt.Printf( "%s", plaintext )
125 os.Exit( 0 )
56 } 126 }
57 127
128
58 if *encr != "" { 129 if *encr != "" {
130 f, err := os.Open( *encr ); if err != nil {
131 log.Fatal( err )
132 }
133 defer f.Close()
134
135 plaintext, err := ioutil.ReadAll( f )
136 if err != nil {
137 log.Fatal( err )
138 }
139
140 block, err := aes.NewCipher( key )
141 if err != nil {
142 panic( err )
143 }
144
145 // IV は公開してもいいので先頭につけておく
146 ciphertext := make( []byte, aes.BlockSize + len( plaintext ) )
147 iv := ciphertext[ :aes.BlockSize ]
148 if _, err := io.ReadFull( rand.Reader, iv ); err != nil {
149 panic( err )
150 }
151
152 stream := cipher.NewCTR( block, iv )
153 stream.XORKeyStream( ciphertext[ aes.BlockSize: ], plaintext )
154
155 fmt.Printf( "%x", ciphertext )
156 os.Exit( 0 )
59 } 157 }
60 158
61 if *chdb != "" && *chhs != "" { 159 if *ghhs != "" {
62 } 160 }
63 161
64 fmt.Fprintf( os.Stderr, "bad argument\n" ) 162 fmt.Fprintf( os.Stderr, "bad argument\n" )
65 os.Exit( 1 ) 163 os.Exit( 1 )
66 } 164 }
69 h := sha256.New() 167 h := sha256.New()
70 h.Write( []byte( text ) ) 168 h.Write( []byte( text ) )
71 return fmt.Sprintf( "%x", h.Sum( nil ) ) 169 return fmt.Sprintf( "%x", h.Sum( nil ) )
72 } 170 }
73 171
74 func encrypt( text string ) []byte {
75 return nil
76 }
77