Mercurial > mercurial > hgweb_rsearcher.cgi
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 |