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 } |
