目的
processingで署名する
IDEの作成とかに使えるかも(IDE作ってる人はこんなの見ないでも作れそうだけど…)
library
ZipSignerとSpongyCastleを導入しといてください
import
import java.security.KeyStore;
import java.io.*;
import android.os.Environment;
import javax.crypto.SecretKey;
import javax.crypto.KeyGenerator;
import kellinwood.security.zipsigner.ZipSigner;
import java.io.InputStream;
import kellinwood.security.zipsigner.optional.CustomKeySigner;
import org.spongycastle.jce.provider.BouncyCastleProvider;
import java.net.*;
権限
processingなら
if (!hasPermission("android.permission.WRITE_EXTERNAL_STORAGE"))requestPermission("android.permission.WRITE_EXTERNAL_STORAGE", "initLocation");
でできます
javaなら勝手にWRITE_EXTERNAL_STORAGE追加してください
Keystoreの作成
KeyStore ks;
void createKey(String keyName,String keyPassword,String Alias,String AliasPassword){
try{
String directory=Environment.getExternalStorageDirectory()+"/"+keyName+"."+KeyStore.getDefaultType();
ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null, keyPassword.toCharArray());
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey mySecretKey=keyGen.generateKey();
KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry(Alias, skEntry, new KeyStore.PasswordProtection(AliasPassword.toCharArray()));
File file=new File(directory);
FileOutputStream fos = new FileOutputStream(file);
ks.store(fos, keyPassword.toCharArray());
}catch(Exception e){
e.printStackTrace();
}
}
でいける
署名
void sign(String keystore,String keystorePassword,String keyAlias,String StringkeyAliasPassword,String inFilename,String outputFilename){
try {
ZipSigner signer = new ZipSigner();
CustomKeySigner.signZip(signer, keystore, keystorePassword.toCharArray(), keyAlias, keyAliasPassword.toCharArray(), "SHA1WITHRSA", inFilename, outputFilename);
}catch (Exception e) {
e.printStackTrace();
}
}
でいける
あとがき
日本語の解説が少ないから手間取ったがやること自体は単純だった