Update README

develop
trivernis 5 years ago
parent 373cb61a90
commit ecc098ea69

@ -11,3 +11,29 @@ cryptpng --image <name of the image> --in <input file> --out <output file>
# decrypt
cryptpng --decrypt --image <crypt image> --out <decrypted output file>
```
## Technical Information
It should be possible to store data with a size up to ~ 4GB, but in reality most image viewers have
problems with chunks that are bigger than several Megabytes.
The data itself is stored in a [png chunk](http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html)
and encrypted via aes. The encryption chunk is stored right before the `IDAT` chunk that contains the
image data. The steps for encrypting are:
### Encrypt
1. Parse the png file and split it into chunks.
2. Prompt for a password and use the sha512 32byte value.
3. Create a base64 string out of the data.
4. Encrypt the base64 string using aes and the provided hashed key.
5. Store the data into the `crPt` chunk.
6. Write the png header and chunks to the output file.
### Decrypt
1. Parse the png file and split it into chunks.
2. Get the `crPt` chunk.
3. Prompt for the password and create the sha512 32byte hash.
4. Decrypt the data using aes and the provided hash key.
5. Decode the base64 data.
6. Write the data to the specified output file.

@ -60,6 +60,7 @@ func main() {
}
}
// encrypts the data of fin inside the png (f) and writes it to fout
func EncryptDataPng(f *os.File, fin *os.File, fout *os.File) {
png := PngData{}
err := png.Read(f)
@ -99,6 +100,7 @@ func encryptData(data []byte) ([]byte, error) {
return encrypt(key, data)
}
// decrypts the data of a png chunk
func decryptData(data []byte) ([]byte, error) {
key := readPassword()
return decrypt(key, data)

Loading…
Cancel
Save