Issue 1:
TL;DR archive/zip cannot decompress a password protected with AES 256 encryption, deflated archive.

Answers to the 5 questions:

go version go1.5 darwin/amd64

OSX Yosemite Version 10.10.5 (14F27) / 2.4 GHz Intel Core 2 Duo

Attempted to unzip password protected .zip file:

Password Encryption was set to AES256

Zip Compression Method was set to COMP_DEFLATE

Zip Compression Level was set to DEFLATE_LEVEL_NORMAL

Expected that the zip file would be extracted fully – as successfully tested using other tools including unar and http://online.b1.org/online

err returned ErrAlgorithm – "zip: unsupported compression algorithm"

I should begin by mentioning that, if the Java code is modified to comment out the following lines; that archive/zip can handle these files without issue:

// parameters.setEncryptFiles(true);
// parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
// parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
// parameters.setPassword("verySecurePassword");

The jar file for net.lingala.zip4j is at www.lingala.net/zip4j/download.php; The following commands compiled and ran the java code below in terminal:

$> javac -cp zip4j_1.3.2.jar ZipTest.java
$> java -cp .:./zip4j_1.3.2.jar ZipTest

Below is the Java code used to generate the zip file.

import java.io.File;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

public class ZipTest {

public static void main(String[] args)
{
System.out.println("starting...");

try {
ZipFile zipFile = new ZipFile("/Users/alex/Desktop/test_nopass.zip");

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword("verySecurePassword");

zipFile.addFile(new File("/Users/alex/Desktop/test.txt"), parameters);
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("done");
}
}

and below is the main.go code for attempting to decompress the zip archive

package main

import (
"archive/zip"
"fmt"
"log"
"os"
"path"
)

func main() {
// Open a zip archive for reading.
r, err := zip.OpenReader("/Users/alex/Desktop/test.zip")
if err != nil {
log.Fatal(err)
}
defer r.Close()

// Iterate through the files in the archive,
// printing some of their contents.
for _, fi := range r.File {
fmt.Printf("Contents of %s:\n", fi.Name)
fmt.Printf("Size compressed: %d bytes\n", fi.CompressedSize64)
fmt.Printf("Size uncompressed:%d bytes\n", fi.UncompressedSize64)
fmt.Printf("Creator Version: %d\n", fi.CreatorVersion)
fmt.Printf("Reader Version: %d\n", fi.ReaderVersion)
fmt.Printf("Flags: %d\n", fi.Flags)
fmt.Printf("Method: %d\n", fi.Method)
fmt.Printf("Extra: %s\n", fi.Extra)

f, err := os.Create(path.Join("/Users/alex/Desktop", fi.Name))
if err != nil {
f.Close()
fmt.Println(err)
}

rc, err := fi.DataOffset()
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%d", rc)
}
f.Close()
}
fmt.Println("DONE!")
}

Issue 2:
ZIP file format specification includes encrypted archives.

Current implementation doesn't support writing/reading such archives.