LoginSignup
1
3

More than 5 years have passed since last update.

processing(android mode)でKeyStoreの作成とapkの署名(一部変更すればjavaでもOK)

Last updated at Posted at 2018-10-05

目的

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();
  }
}

でいける

あとがき

日本語の解説が少ないから手間取ったがやること自体は単純だった

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3