diff go/crypto.go @ 5:e3b10fb860b3

release v1.0.
author pyon@macmini
date Mon, 22 Oct 2018 22:17:02 +0900
parents db4813125eb8
children f5ffc34f045a
line wrap: on
line diff
--- a/go/crypto.go	Mon Oct 15 20:07:38 2018 +0900
+++ b/go/crypto.go	Mon Oct 22 22:17:02 2018 +0900
@@ -1,7 +1,7 @@
 /*
  crypto.go  : crypto-program.
  Version    : 0.0
- Last Change: 2018-10-11 木 13:54:56.
+ Last Change: 2018-10-19 金 15:58:10.
 
  install to: rsearcher_root/
              server_root/
@@ -23,25 +23,40 @@
 	"os"
 )
 
+var version string
+
+func init() {
+	version = "1.0"
+}
+
 func main() {
 	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." )
+	key  := flag.String( "k", "1234567890abcdef1234567890abcdef", "key" )	// len = 32
 	encr := flag.String( "e", "", "encrypt hhs." )
+	decr := flag.String( "d", "", "decrypt hhs." )
 	ghhs := flag.String( "f", "", "get hhs info." )
 
+	pver := flag.Bool( "v", false, "print version." )
+
 	flag.Parse()
 
+	if *pver {
+		fmt.Println( "crypto [", version, "]" )
+		os.Exit( 0 )
+	}
+
+	/* Hash ( 1 word ) */
 	if *enca != "" {
 		buf := *salt + enc_sha256( *enca ) + *salt
 		fmt.Println( enc_sha256( buf ) )
 		os.Exit( 0 )	// done.
 	}
 
+	/* Hash ( csv ) */
 	if *encb != "" {
 		f, err := os.Open( *encb ); if err != nil {
 			log.Fatal( err )
@@ -63,6 +78,7 @@
 		os.Exit( 0 )	// done.
 	}
 
+	/* Password Check */
 	if *coll != "" {
 		f, err := os.Open( *coll ); if err != nil {
 			log.Fatal( err )
@@ -98,50 +114,20 @@
 		os.Exit( 0 )	// done.
 	}
 
-	key, _ := hex.DecodeString( "f368616e676520746869732070617373" )	// len = 32
+	/* Encrypto & Decrypto */
+	k, _ := hex.DecodeString( *key )	// len = 32
+	block, err := aes.NewCipher( k )
+	if err != nil {
+		panic( err )
+	}
 
-	if *decr != "" {
-		f, err := os.Open( *decr ); if err != nil {
-			log.Fatal( err )
-		}
-		defer f.Close()
-
-		ciphertext, err := ioutil.ReadAll( f )
+	// encrypto file
+	if *encr != "" {
+		plaintext, err := ioutil.ReadFile( *encr )	// 入力CSVは S-JIS
 		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 ]
@@ -152,17 +138,37 @@
 		stream := cipher.NewCTR( block, iv )
 		stream.XORKeyStream( ciphertext[ aes.BlockSize: ], plaintext )
 
-		fmt.Printf( "%x", ciphertext )
+		fmt.Printf( "%s", ciphertext )
 		os.Exit( 0 )
 	}
 
-	if *ghhs != "" {
+	// decrypt file
+	if *decr != "" {
+		ciphertext, err := ioutil.ReadFile( *decr )
+		if err != nil {
+			log.Fatal( 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 )
 	}
 
+	/* Etc */
+	if *ghhs != "" {
+		os.Exit( 0 )
+	}
+
+	/* Error */
 	fmt.Fprintf( os.Stderr, "bad argument\n" )
 	os.Exit( 1 )
 }
 
+/* Hash Function */
 func enc_sha256( text string ) string {
 	h := sha256.New()
 	h.Write( []byte( text ) )