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 |
