Mercurial > mercurial > hgweb_rsearcher.cgi
diff go/crypto.go @ 3:db4813125eb8
many changes.
author | pyon@macmini |
---|---|
date | Thu, 11 Oct 2018 22:11:09 +0900 |
parents | d3b8cd5aeb70 |
children | e3b10fb860b3 |
line wrap: on
line diff
--- a/go/crypto.go Tue Oct 02 21:20:05 2018 +0900 +++ b/go/crypto.go Thu Oct 11 22:11:09 2018 +0900 @@ -1,7 +1,7 @@ /* crypto.go : crypto-program. Version : 0.0 - Last Change: 2018-09-30 Sun 16:47:45. + Last Change: 2018-10-11 木 13:54:56. install to: rsearcher_root/ server_root/ @@ -9,22 +9,30 @@ package main import ( + "crypto/aes" + "crypto/cipher" + "crypto/rand" "crypto/sha256" + "encoding/csv" + "encoding/hex" "fmt" "flag" + "io" + "io/ioutil" + "log" "os" ) func main() { - salt := flag.String( "s", "#!@-", "salt." ) + salt := flag.String( "s", "dummysalt", "salt." ) + enca := flag.String( "a", "", "encrypt plaintext." ) encb := flag.String( "b", "", "encrypt csv-file." ) coll := flag.String( "c", "", "collate user/password." ) decr := flag.String( "d", "", "deecrypt hhs." ) encr := flag.String( "e", "", "encrypt hhs." ) - chdb := flag.String( "f", "", "collate hhs." ) - chhs := flag.String( "g", "", "collate hhs." ) + ghhs := flag.String( "f", "", "get hhs info." ) flag.Parse() @@ -35,7 +43,41 @@ } if *encb != "" { - r := csv.NewReader(strings.NewReader(in)) + f, err := os.Open( *encb ); if err != nil { + log.Fatal( err ) + } + defer f.Close() + + r := csv.NewReader( f ) + for { + record, err := r.Read() + if err == io.EOF { + break + } + if err != nil { + log.Fatal( err ) + } + buf := *salt + enc_sha256( record[ 1 ] ) + *salt + fmt.Println( record[ 0 ], enc_sha256( buf ) ) + } + os.Exit( 0 ) // done. + } + + if *coll != "" { + f, err := os.Open( *coll ); if err != nil { + log.Fatal( err ) + } + defer f.Close() + + if flag.NArg() != 2 { + fmt.Fprintf( os.Stderr, "bad argument\n" ) + os.Exit( 1 ) + } + user := flag.Arg( 0 ) + pw := flag.Arg( 1 ) + + r := csv.NewReader( f ) + r.Comma = ' ' for { record, err := r.Read() if err == io.EOF { @@ -44,21 +86,77 @@ if err != nil { log.Fatal( err ) } - buf := *salt + enc_sha256( record[1] ) + *salt - fmt.Println( record[0], ",", enc_sha256( buf ) ) + + if record[ 0 ] == user { + buf := *salt + enc_sha256( pw ) + *salt + if record[ 1 ] == enc_sha256( buf ) { + fmt.Println( "valid" ) + os.Exit( 39 ) + } + } } - } - - if *coll != "" { + os.Exit( 0 ) // done. } + key, _ := hex.DecodeString( "f368616e676520746869732070617373" ) // len = 32 + if *decr != "" { + f, err := os.Open( *decr ); if err != nil { + log.Fatal( err ) + } + defer f.Close() + + ciphertext, err := ioutil.ReadAll( f ) + if err != nil { + log.Fatal( err ) + } + + block, err := aes.NewCipher( key ) + if err != nil { + panic( err ) + } + + iv := ciphertext[ :aes.BlockSize ] + plaintext := make( []byte, len( ciphertext ) - aes.BlockSize ) + stream := cipher.NewCTR( block, iv ) + stream.XORKeyStream( plaintext, ciphertext[ aes.BlockSize: ] ) + + fmt.Printf( "%s", plaintext ) + os.Exit( 0 ) } + if *encr != "" { + f, err := os.Open( *encr ); if err != nil { + log.Fatal( err ) + } + defer f.Close() + + plaintext, err := ioutil.ReadAll( f ) + if err != nil { + log.Fatal( err ) + } + + block, err := aes.NewCipher( key ) + if err != nil { + panic( err ) + } + + // IV は公開してもいいので先頭につけておく + ciphertext := make( []byte, aes.BlockSize + len( plaintext ) ) + iv := ciphertext[ :aes.BlockSize ] + if _, err := io.ReadFull( rand.Reader, iv ); err != nil { + panic( err ) + } + + stream := cipher.NewCTR( block, iv ) + stream.XORKeyStream( ciphertext[ aes.BlockSize: ], plaintext ) + + fmt.Printf( "%x", ciphertext ) + os.Exit( 0 ) } - if *chdb != "" && *chhs != "" { + if *ghhs != "" { } fmt.Fprintf( os.Stderr, "bad argument\n" ) @@ -71,7 +169,3 @@ return fmt.Sprintf( "%x", h.Sum( nil ) ) } -func encrypt( text string ) []byte { - return nil -} -