PGP覚書
PGP (Pretty Good Privacy) とは
Philip Zimmermann氏が開発した暗号化ソフトとその規格。
電子メールやファイルの暗号化や電子署名に用いられる。
公開鍵暗号方式を採用し、秘密鍵と公開鍵を用いてそれぞれ暗号化と署名を行う。
Java で PGP
Bouncy Castle Crypto APIs : 暗号化ライブラリ
http://www.bouncycastle.org/
bcprov-jdkxx-xxx.jar
bcpg-jdkxx-xxx.jar
をダウンロードする。
/**
* ファイルを暗号化する
*
* @param clearTextFile 平文ファイル
* @param encryptFile 暗号化ファイル
* @param secringgpg GnuPGの鍵が保存されているsecring.gpg
* @throws GeneralSecurityException
* @throws IOException
* @throws PGPException
*/
public void encryptFile(File clearTextFile, File encryptFile, File secringgpg)
throws GeneralSecurityException, IOException, PGPException {
installBC();
byte[] data = encrypt(getPublicKey(secringgpg), clearTextFile);
createFile(data, encryptFile);
}
/**
* ファイルを複合する
*
* @param encryptFile 暗号化ファイル
* @param clearTextFile 平文ファイル
* @param secringgpg GnuPGの鍵が保存されているsecring.gpg
* @param passphrase パスフレーズ
* @throws GeneralSecurityException
* @throws IOException
* @throws PGPException
*/
public void decryptFile(File encryptFile, File clearTextFile, File secringgpg, char[] passphrase)
throws GeneralSecurityException, IOException, PGPException {
installBC();
byte[] data = decrypt(getPrivateKey(secringgpg, passphrase), encryptFile);
createFile(data, clearTextFile);
}
private void installBC() {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
}
private byte[] encrypt(Key key, File clearTextFile) throws GeneralSecurityException, IOException {
byte[] data = getByteData(clearTextFile);
Cipher cipher = Cipher.getInstance("RSA", Security.getProvider(BouncyCastleProvider.PROVIDER_NAME));
cipher.init(Cipher.ENCRYPT_MODE, key);
cipher.update(data);
return cipher.doFinal();
}
private byte[] decrypt(Key key, File encryptFile) throws GeneralSecurityException, IOException {
byte[] data = getByteData(encryptFile);
Cipher cipher = Cipher.getInstance("RSA", Security.getProvider(BouncyCastleProvider.PROVIDER_NAME));
cipher.init(Cipher.DECRYPT_MODE, key);
cipher.update(data);
return cipher.doFinal();
}
private PrivateKey getPrivateKey(File secringgpg, char[] passphrase)
throws NoSuchProviderException, PGPException, IOException {
PGPPrivateKey pgpPrivateKey = getSecretKey(secringgpg).extractPrivateKey(
passphrase, BouncyCastleProvider.PROVIDER_NAME);
return pgpPrivateKey.getKey();
}
private PublicKey getPublicKey(File secringgpg) throws NoSuchProviderException, IOException, PGPException {
PGPPublicKey pgpPublicKey = getSecretKey(secringgpg).getPublicKey();
PublicKey publicKey = pgpPublicKey.getKey(BouncyCastleProvider.PROVIDER_NAME);
return publicKey;
}
private PGPSecretKey getSecretKey(File secringgpg) throws IOException, PGPException {
InputStream is = null;
try {
is = PGPUtil.getDecoderStream(new FileInputStream(secringgpg));
PGPSecretKeyRing keyRing = new PGPSecretKeyRing(is);
return keyRing.getSecretKey();
} finally {
if (is != null) is.close();
}
}
private byte[] getByteData(File file) throws IOException {
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
byte[] fileData = new byte[(int) file.length()];
fis.read(fileData);
return fileData;
} finally {
if (fis != null) fis.close();
}
}
private void createFile(byte[] fileData, File file) throws IOException {
if (file.exists()) file.delete();
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(fileData);
} finally {
if (fos != null) fos.close();
}
}
Fedoraメモ
ループバックアドレスの確認
/etc/hosts
Syslogの出力先
/etc/syslog.conf
sambaの起動・停止
/etc/init.d/smb start
/etc/init.d/smb stop
samba設定ファイル
/etc/samba/smb.conf
syslog-ng 設定ファイル
/opt/syslog-ng/etc/syslog-ng.conf
syslog-ng の起動・停止
service syslog-ng start
service syslog-ng stop
VMware構成ファイル覚書
Beep音を消す
mks.noBeep = "TRUE"
VMX ホストとのフォルダ共有
sharedFolder.option = "alwaysEnabled"
sharedFolder0.enabled = "TRUE"
sharedFolder0.present = "TRUE"
sharedFolder0.writeAccess = "TRUE"
sharedFolder0.readAccess = "TRUE"
sharedFolder0.hostPath = "c:\share"
sharedFolder0.guestName ="share"
sharedFolder0.eXpiration = "never"
sharedFolder.maxNum = "1"
FTPメモ
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414187209
●SSHとは
遠隔操作でコンピュータ(主にUnixOS)を操作するためのインターネットプロトコル(通信規格)です。通信は暗号化されます。通常TCP443番ポートを用いて通信をします。
ほかにも遠隔操作をする規格にtelnetというものがあります。通信は暗号化されないため、セキュリティの問題から通常はSSHを利用します。TCP23番ポートを使います。
●FTPとは
ファイル転送プロトコルです。通信は暗号化されません。ファイルをダウンロードしたり、アップロードしたり、編集や削除したりといったことをするのに使います。HTTPと比べてファイル転送に特化しているため通信速度が速いです。通常はTCP21と20番ポートを使います。
●「SSH」でデータベースサーバーに接続するには
SSHというプロトコルと、データベースを操作するプロトコルは完全別物です。
質問の意を察するに、SSHでシェルサーバに接続して、コマンドによるデータベース操作をしたいということでしょうか。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q138750548
Telnetは遠くにあるコンピューターを、インターネットを使ってあたかも自分の目の前にあるかのように操作するためのものです。 Telnetはテレワーカーのための簡単な対応法です。このやり方は「テレワーキング」という言葉ができるよりもずっと以前からありました。
Telnetはまずユニックス・システムのために考え出されました。ユーザーは自分のパソコンでやるlogin(パソコンの使用を届ける)と同じようにインターネットに接続されたホスト・コンピューターでloginすることができます。その際rlogin(remote login)という形で行います。このlogin使用届)はユーザー名とパスワードを知っている場合のみ実行することができます。ということはダイアルアップしたホスト・コンピューターにユーザーとして登録されるということです。ダイヤルアップした後Unix-Shell(プロンプト)が画面に出ます。ユーザーは遠くにあるコンピューターに「プログラムをスタートしろ」などとOSコマンドを出すことができます。
SSH(Secure Shell)はTelnetの1つの変化した形です。これはなかなかいいバリエーションで、徐々に認められています。 Telnetとの差は、SSHの場合仕事をしている内容が暗号化されて送信されることです。遠くにあるコンピューター上で仕事をしている最中に設定のファイルやパスワードなどデリケートな情報が編集されることがよくあるため、これは特に重要な点です。ほとんど気づくことがなくても、仕事中このような情報はすべてインターネットの中で多くのコンピューターを通って目的のコンピューターに届けられ、途中の誰かがちょっと悪意を持っていれば情報を横取りすることができます。いくつかの新しいTelnet-Clientsは最近SSHプロトコルも薦めています。
雑多な覚書
圧縮
GZIPOutputStream
を使用するとデータをgzip圧縮して送信できる。
現在の多くのブラウザではgzipに対応しているため
サーバー側でエンコードして送信、ブラウザ側でデコードして表示、が可能。
cronとrsync
cron(クーロン)は、定期的にジョブを実行するための機能。
cronを利用するには、crondサービス(cronデーモン)が動作している必要がある。
通常はLinuxのインストール時に導入され,自動的にcrondが稼働するように設定されている。
rsyncは、UNIXシステムにおいて、差分符号化を使ってデータ転送量を最小化し、
遠隔地間のファイルやディレクトリの同期を行うアプリケーションソフトウェアである。
類似のプログラムやプロトコルにはない rsync 独自の特徴として、ミラーサイトとの転送が双方向に高々1回で済む点がある。
rsync はディレクトリ内容を表示し、ディレクトリやファイルをコピーできる。オプションでデータ圧縮や再帰も指定可能。
==
そのユーザになって
参照
ctontab -l
編集
crontab -e
設定方法
分 時 日 月 曜日 実行コマンド
設定例
05 00 * * * /unyou/scripts/cms_bin/****.sh
これで毎日0時5分に****.shを実行します。
cronはユーザごとに持ってるので
実行したいユーザに設定する必要があります。
(rootなら問題ないですが、rootを使用できないとこもあるので)
==
SimpleDateFormatのマルチスレッド対応1
使用の都度オブジェクトを生成するよりsynchonizedして使いまわすほうが高速。
ThreadLocalを使用したほうがさらに高速。(synchonizedと同程度か?)
SimpleDateFormatのマルチスレッド対応2
SimpleDateFormatはスレッドセーフではないため、
Jakarta Commonsのcommons-lang.jarを導入可能な環境であれば
FastDateFormatに置き換えるべき。
String#split()メソッド
分割する正規表現に挟まれた文字が存在しない場合、分割してくれない。
例:
String str = "a,b,c,d,e,,,,,";
String[] aray = str.split(",");
System.out.printin(aray.length); //「5」となる。e以降の空文字が配列に格納されるわけではない。
Eclipse
初期起動時に見慣れないエラーが出たら、\workspace\.metadata\.logに詳細なエラーが出ているかも。
BeanUtils.copyProperties(to,from)
fromからtoに、同じ変数名の値をコピーする。
csv update -Aと同等の処理
プロジェクト右クリック⇒置換⇒別のブランチまたはバージョン⇒HEAD