Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Added crypto |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | trunk |
Files: | files | file ages | folders |
SHA1: |
6dc823f396bbd539ffb641633341e7e7 |
User & Date: | schollz 2016-11-17 18:39:49.389 |
Context
2016-11-17
| ||
18:39 | Added crypto Leaf check-in: 6dc823f396 user: schollz tags: trunk | |
18:18 | initial empty check-in check-in: f0209aca5a user: schollz tags: trunk | |
Changes
Added src/crypto.go.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | package main import ( "bytes" "compress/flate" "crypto/sha256" "encoding/hex" "fmt" "io" "io/ioutil" "github.com/gtank/cryptopasta" ) var ENCRYPTION_COMPRESSION = true func main() { test := `func decrypt(content, password []byte) ([]byte, error) { content = decompressByte(content) key := sha256.Sum256(password) decrypted, err := cryptopasta.Decrypt(content, &key) return decrypted, err } func encrypt(content, password []byte) ([]byte, error) { key := sha256.Sum256([]byte(password)) encrypted, err := cryptopasta.Encrypt(content, &key) encrypted = compressByte(encrypted) return encrypted, err } func encryptString(content string, password string) (string, error) { bEncrypted, err := encrypt([]byte(content), []byte(password)) if err != nil { return "", err } return hex.EncodeToString(bEncrypted), nil }` test = "test.txt.gz" a, _ := encryptString(test, "1234") fmt.Println(a) fmt.Println(len(a)) fmt.Println(len(test)) // fmt.Println(decryptString(a, "1234")) fmt.Println(encryptAndWrite("test.txt", "somedata", "1234")) fmt.Println(openAndDecrypt("test.txt", "124")) } func decrypt(content, password []byte) ([]byte, error) { key := sha256.Sum256(password) decrypted, err := cryptopasta.Decrypt(content, &key) if ENCRYPTION_COMPRESSION { decrypted = decompressByte(decrypted) } return decrypted, err } func encrypt(content, password []byte) ([]byte, error) { if ENCRYPTION_COMPRESSION { content = compressByte(content) } key := sha256.Sum256([]byte(password)) encrypted, err := cryptopasta.Encrypt(content, &key) return encrypted, err } func encryptString(content string, password string) (string, error) { bEncrypted, err := encrypt([]byte(content), []byte(password)) if err != nil { return "", err } return hex.EncodeToString(bEncrypted), nil } func decryptString(encodedContent string, password string) (string, error) { bEncrypted, err := hex.DecodeString(encodedContent) if err != nil { return "", err } bDecrypt, err := decrypt(bEncrypted, []byte(password)) return string(bDecrypt), err } func encryptAndWrite(filename, content, password string) (err error) { e, err := encrypt([]byte(content), []byte(password)) if err != nil { return err } return ioutil.WriteFile(filename, e, 0644) } func openAndDecrypt(filename, password string) (string, error) { contentBytes, err := ioutil.ReadFile(filename) if err != nil { return "", err } decryptedContent, err := decrypt(contentBytes, []byte(password)) return string(decryptedContent), err } // compressByte returns a compressed byte slice. func compressByte(src []byte) []byte { compressedData := new(bytes.Buffer) compress(src, compressedData, 9) return compressedData.Bytes() } // decompressByte returns a decompressed byte slice. func decompressByte(src []byte) []byte { compressedData := bytes.NewBuffer(src) deCompressedData := new(bytes.Buffer) decompress(compressedData, deCompressedData) return deCompressedData.Bytes() } // compress uses flate to compress a byte slice to a corresponding level func compress(src []byte, dest io.Writer, level int) { compressor, _ := flate.NewWriter(dest, level) compressor.Write(src) compressor.Close() } // compress uses flate to decompress an io.Reader func decompress(src io.Reader, dest io.Writer) { decompressor := flate.NewReader(src) io.Copy(dest, decompressor) decompressor.Close() } |