OP here just finished 33 except instead of uploading it I just serv the file
package main
import (
"crypto/aes"
"crypto/rand"
"flag"
"io/ioutil"
"log"
"net/http"
)
func main() {
var filename = flag.String("filename", "./test.txt", "The file you want to upload")
flag.Parse(
fileContent, err := ioutil.ReadFile(*filename)
if err != nil {
log.Println(err)
}
var encrypted = encrypt(fileContent, genKey())
ioutil.WriteFile("./serv/file.ecrypted", encrypted, 0644)
var ip string = "0.0.0.0"
var port string = "9450"
http.Handle("/serv/", http.StripPrefix("/serv/", http.FileServer(http.Dir("serv"))))
log.Println("Server started @ " + ip + ":" + port)
log.Println("file can be found at 0.0.0.0:9450/serv/")
log.Fatal(http.ListenAndServe(ip+":"+port, nil))
}
func genKey() []byte {
key := make([]byte, 32)
_, err := rand.Read(key)
if err != nil {
log.Println(err)
}
return key
}
func encrypt(file []byte, key []byte) []byte {
cipher, err := aes.NewCipher([]byte(key))
if err != nil {
log.Println(err)
}
if len(file) < cipher.BlockSize() {
var endLength = cipher.BlockSize() - len(file)
ending := make([]byte, endLength, endLength)
file = append(file[:], ending[:]...)
cipher.Encrypt(file, file)
} else {
var endLength = len(file) % cipher.BlockSize()
ending := make([]byte, endLength, endLength)
file = append(file[:], ending[:]...)
cipher.Encrypt(file, file)
}
return file
}