Mercurial > mercurial > hgweb_rsearcher.cgi
comparison go/crypto.go @ 5:e3b10fb860b3
release v1.0.
author | pyon@macmini |
---|---|
date | Mon, 22 Oct 2018 22:17:02 +0900 |
parents | db4813125eb8 |
children | f5ffc34f045a |
comparison
equal
deleted
inserted
replaced
4:06342fc544e4 | 5:e3b10fb860b3 |
---|---|
1 /* | 1 /* |
2 crypto.go : crypto-program. | 2 crypto.go : crypto-program. |
3 Version : 0.0 | 3 Version : 0.0 |
4 Last Change: 2018-10-11 木 13:54:56. | 4 Last Change: 2018-10-19 金 15:58:10. |
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 |
21 "io/ioutil" | 21 "io/ioutil" |
22 "log" | 22 "log" |
23 "os" | 23 "os" |
24 ) | 24 ) |
25 | 25 |
26 var version string | |
27 | |
28 func init() { | |
29 version = "1.0" | |
30 } | |
31 | |
26 func main() { | 32 func main() { |
27 salt := flag.String( "s", "dummysalt", "salt." ) | 33 salt := flag.String( "s", "dummysalt", "salt." ) |
28 | |
29 enca := flag.String( "a", "", "encrypt plaintext." ) | 34 enca := flag.String( "a", "", "encrypt plaintext." ) |
30 encb := flag.String( "b", "", "encrypt csv-file." ) | 35 encb := flag.String( "b", "", "encrypt csv-file." ) |
31 coll := flag.String( "c", "", "collate user/password." ) | 36 coll := flag.String( "c", "", "collate user/password." ) |
32 | 37 |
33 decr := flag.String( "d", "", "deecrypt hhs." ) | 38 key := flag.String( "k", "1234567890abcdef1234567890abcdef", "key" ) // len = 32 |
34 encr := flag.String( "e", "", "encrypt hhs." ) | 39 encr := flag.String( "e", "", "encrypt hhs." ) |
40 decr := flag.String( "d", "", "decrypt hhs." ) | |
35 ghhs := flag.String( "f", "", "get hhs info." ) | 41 ghhs := flag.String( "f", "", "get hhs info." ) |
42 | |
43 pver := flag.Bool( "v", false, "print version." ) | |
36 | 44 |
37 flag.Parse() | 45 flag.Parse() |
38 | 46 |
47 if *pver { | |
48 fmt.Println( "crypto [", version, "]" ) | |
49 os.Exit( 0 ) | |
50 } | |
51 | |
52 /* Hash ( 1 word ) */ | |
39 if *enca != "" { | 53 if *enca != "" { |
40 buf := *salt + enc_sha256( *enca ) + *salt | 54 buf := *salt + enc_sha256( *enca ) + *salt |
41 fmt.Println( enc_sha256( buf ) ) | 55 fmt.Println( enc_sha256( buf ) ) |
42 os.Exit( 0 ) // done. | 56 os.Exit( 0 ) // done. |
43 } | 57 } |
44 | 58 |
59 /* Hash ( csv ) */ | |
45 if *encb != "" { | 60 if *encb != "" { |
46 f, err := os.Open( *encb ); if err != nil { | 61 f, err := os.Open( *encb ); if err != nil { |
47 log.Fatal( err ) | 62 log.Fatal( err ) |
48 } | 63 } |
49 defer f.Close() | 64 defer f.Close() |
61 fmt.Println( record[ 0 ], enc_sha256( buf ) ) | 76 fmt.Println( record[ 0 ], enc_sha256( buf ) ) |
62 } | 77 } |
63 os.Exit( 0 ) // done. | 78 os.Exit( 0 ) // done. |
64 } | 79 } |
65 | 80 |
81 /* Password Check */ | |
66 if *coll != "" { | 82 if *coll != "" { |
67 f, err := os.Open( *coll ); if err != nil { | 83 f, err := os.Open( *coll ); if err != nil { |
68 log.Fatal( err ) | 84 log.Fatal( err ) |
69 } | 85 } |
70 defer f.Close() | 86 defer f.Close() |
96 } | 112 } |
97 } | 113 } |
98 os.Exit( 0 ) // done. | 114 os.Exit( 0 ) // done. |
99 } | 115 } |
100 | 116 |
101 key, _ := hex.DecodeString( "f368616e676520746869732070617373" ) // len = 32 | 117 /* Encrypto & Decrypto */ |
118 k, _ := hex.DecodeString( *key ) // len = 32 | |
119 block, err := aes.NewCipher( k ) | |
120 if err != nil { | |
121 panic( err ) | |
122 } | |
102 | 123 |
103 if *decr != "" { | 124 // encrypto file |
104 f, err := os.Open( *decr ); if err != nil { | 125 if *encr != "" { |
105 log.Fatal( err ) | 126 plaintext, err := ioutil.ReadFile( *encr ) // 入力CSVは S-JIS |
106 } | |
107 defer f.Close() | |
108 | |
109 ciphertext, err := ioutil.ReadAll( f ) | |
110 if err != nil { | 127 if err != nil { |
111 log.Fatal( err ) | 128 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 ) | |
126 } | |
127 | |
128 | |
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 } | 129 } |
144 | 130 |
145 // IV は公開してもいいので先頭につけておく | 131 // IV は公開してもいいので先頭につけておく |
146 ciphertext := make( []byte, aes.BlockSize + len( plaintext ) ) | 132 ciphertext := make( []byte, aes.BlockSize + len( plaintext ) ) |
147 iv := ciphertext[ :aes.BlockSize ] | 133 iv := ciphertext[ :aes.BlockSize ] |
150 } | 136 } |
151 | 137 |
152 stream := cipher.NewCTR( block, iv ) | 138 stream := cipher.NewCTR( block, iv ) |
153 stream.XORKeyStream( ciphertext[ aes.BlockSize: ], plaintext ) | 139 stream.XORKeyStream( ciphertext[ aes.BlockSize: ], plaintext ) |
154 | 140 |
155 fmt.Printf( "%x", ciphertext ) | 141 fmt.Printf( "%s", ciphertext ) |
156 os.Exit( 0 ) | 142 os.Exit( 0 ) |
157 } | 143 } |
158 | 144 |
159 if *ghhs != "" { | 145 // decrypt file |
146 if *decr != "" { | |
147 ciphertext, err := ioutil.ReadFile( *decr ) | |
148 if err != nil { | |
149 log.Fatal( err ) | |
150 } | |
151 | |
152 iv := ciphertext[ :aes.BlockSize ] | |
153 plaintext := make( []byte, len( ciphertext[ aes.BlockSize: ] ) ) | |
154 stream := cipher.NewCTR( block, iv ) | |
155 stream.XORKeyStream( plaintext, ciphertext[ aes.BlockSize: ] ) | |
156 | |
157 fmt.Printf( "%s", plaintext ) | |
158 os.Exit( 0 ) | |
160 } | 159 } |
161 | 160 |
161 /* Etc */ | |
162 if *ghhs != "" { | |
163 os.Exit( 0 ) | |
164 } | |
165 | |
166 /* Error */ | |
162 fmt.Fprintf( os.Stderr, "bad argument\n" ) | 167 fmt.Fprintf( os.Stderr, "bad argument\n" ) |
163 os.Exit( 1 ) | 168 os.Exit( 1 ) |
164 } | 169 } |
165 | 170 |
171 /* Hash Function */ | |
166 func enc_sha256( text string ) string { | 172 func enc_sha256( text string ) string { |
167 h := sha256.New() | 173 h := sha256.New() |
168 h.Write( []byte( text ) ) | 174 h.Write( []byte( text ) ) |
169 return fmt.Sprintf( "%x", h.Sum( nil ) ) | 175 return fmt.Sprintf( "%x", h.Sum( nil ) ) |
170 } | 176 } |