SyntaxHighlighter

2013年6月22日土曜日

パスワード管理アプリレビューその8 [Android]

パスワード管理アプリレビュー第八弾。

アプリ名
Pocket
Developer
Tim Clark
URL(GooglePlay)
https://play.google.com/store/apps/details?id=com.citc.wallet
広告表示
Good Point
  • DropBox連携機能
  • PC版アプリとデータ共有可能
  • デザイン
  • カテゴリ分け可能
  • カテゴリは任意の名称で追加・削除可能
  • 登録するデータも任意項目の追加可能
  • 海外製アプリだがインタフェースはほぼ日本語対応(しかも自然)
  • XMLまたはCSVでのエクスポートも可能
Bad Point
  • Developerが日本(法)人でなく信頼性が判断できない
  • 利用規約が英語だけで日本語訳無し
  • ボタンがあるスペースに広告が遅れて出てくるので誤クリックの可能性が高い
  • 各エントリのパスワード入力欄が伏字にならない
結論
アンインストール

パスワードデータをPCと共有したいならこのアプリになるでしょうか。 他にもDropBoxではなく独自のクラウドにデータ保存するタイプのアプリもいくつかありますが、独自ものよりDropBoxのほうが可用性・信頼性が高そうなイメージ。 DropBox連携無しでも勿論使えます。

Badにあげた、広告の誤クリックをしばしばしてしまってイラっとするのでアンインストールしました。

2013年6月20日木曜日

パスワード管理アプリレビューその7 [Android]

パスワード管理アプリレビュー第七弾。

アプリ名
パスワード管理アプリ SIS-パス管理(マッシュルーム対応)
Developer
SISYOU.KUM
URL(GooglePlay)
https://play.google.com/store/apps/details?id=jp.sisyou.kumikashi.mpassmgr
広告表示
Good Point
  • DeveloperのWEBがある
  • マッシュルーム対応
  • ソート可能
  • Xperiaでもちゃんと外部SDにバックアップされる
  • 広告を上下好きな方に移動できる
  • 操作ボタンを上下好きな方に移動できる
  • つまり広告を誤クリックしにくいように配置できる
  • デザイン
Bad Point
  • 無料版には機能制限がある
  • バックアップファイルがアプリ用のフォルダにまとめられずSDの直下に出力される
  • 2回目からのバックアップは手動で退避しておかないと前回のバックアップファイルが上書きされてしまう
  ※バージョンアップで改善されたらしいです。
結論
キープ

機能制限なし・広告なしの有料版が99円であります。 無料版の機能制限は検索機能とカテゴリ分けです。 別に必須機能ではないのでなくてもBadというわけではないのですが、広告表示無しならともかく広告有りで機能制限されるとなんとなく悔しい感じがあるのであえてBadにあげてみました。

バックアップですが、私の使っている端末は外部ストレージは /mnt/sdcard/external_sd なのですが、getExternalStorageDirectory() では /mnt/sdcard が返ってくるので、一般的な方法で外部SDに書こうとすると実は内部SDに保存されてしまいます。 これまでレビューしてきたアプリ群もバックアップ先は外部と謳われていても実際は内部SDになっていました。 しかしこのアプリはちゃんと external_sd に出力されます。(ただし直下なのが残念すぎますが・・・。フォルダ作って欲しい。) どうやって external_sd 特定しているんでしょうか。fstab 見ているのかなあ?個人的には内部SDでも外部SDでもどっちでもいいのですが、気にする人にはGoodなのかも。 暗号化もちゃんとされています。
バックアップファイル名が固定で上書きされてしまうのは個人的にはかなりマイナスポイントですね。複数世代とっておきたい心配性な人なので。
※打ち消し線部分はバージョンアップで改善されたそうです。(2013/09/21追記)

アプリ紹介文で声高にUIデザインについて謳われていますが、これまでもGoodPointに「デザイン」を挙げてきたいくつかのアプリと比較して、それほど突出しているという感じは受けませんでした。勿論、平均以上にはGood Designですが。私が見た目音痴なだけかも。総合的に良いアプリだと思います。

2013年6月19日水曜日

パスワード管理アプリレビューその6 [Android]

パスワード管理アプリレビュー第六弾。

アプリ名
パスワード管理アプリ I.P-Pon! Free
Developer
Nevision Corporation
URL(GooglePlay)
https://play.google.com/store/apps/details?id=jp.co.nevision.app.ippon_free
広告表示
Good Point
  • Developerが法人(ベンチャーぽいが10年近くは社歴があるようだ)
  • グループ分け可能(3つのみ)
  • 各エントリごとに追加項目の登録が可能(2つのみ)
Bad Point
  • アイコンが小さく誤タップの恐れあり
  • バックアップ機能無し
結論
アンインストール

特にGoodだともBadだとも思わないので上の箇条書きには記載していないが、ブラウザを内蔵しておりIDとパスワードの自動入力ができるらしいのが最大の特徴。(使ってみてはない)
有料版も近日公開らしいが、この機能がある限り有料版でもネットワーク通信の権限が必須ということになる。
利用規約はWEBにあるがプライバシーポリシーは無く登録データの扱いについては不明。
リスト表示の各エントリに表示されるアイコンが小さすぎてストレスを感じる。
バックアップ機能がないのはNGなのでアンインストール。

2013年6月18日火曜日

パスワード管理アプリレビュー番外編 [Android]

一見無料なんだけど期間制限とか現実的でないレベルの機能制限があるアプリとかはレビューしてません。該当するものをメモしておきます。

Keeperパスワード&データボルト
海外DeveloperでレビューでもSPAMが来るようになったとか微妙な評価が多い。30日間の期間制限。30日経過後は750円/年っぽい。
パスワードマネージャー™
安心のTrendMicro製だが無料版は5件までしか登録できない。有料版も買いきりではなく月額制。年に換算するとKeeperパスワード&データボルトの倍以上のお値段。

2013年6月17日月曜日

パスワード管理アプリレビューその5 [Android]

パスワード管理アプリレビュー第五弾。そろそろ疲れてきましたが10個までレビューしてランキングでもつけたいと思います。

アプリ名
パス管 (パスワード管理ツール)
Developer
xeeken
URL(GooglePlay)
https://play.google.com/store/apps/details?id=jp.xeeken.android.passmgr
広告表示
Good Point
  • シンプル
  • マッシュルーム対応
  • ジェスチャー対応
  • ジェスチャー登録後もマスターパスワード入力でのログインも可能
  • エクスポート・インポートが容易
  • ソート可能
Bad Point
  • マスターパスワード登録時に伏字にならない
  • 「終了」ボタンで終了してもロックがかからない
  • ログイン継続時間の設定通りに動作しない
  • バックアップファイルがパスワードしか暗号化されていない
結論
アンインストール

DeveloperのWebは公開されているがアプリの紹介があるのみで人柄は伺いしれない。
マスターパスワードをジェスチャーで代用できるのが最大の特徴。
ログイン継続時間の件は、Activityが完全に終了してからカウントされるのだろうか? onPause状態では初期設定の1分を経過したあともロックされなかった。
バックアップファイルがパスワードしか暗号化されないのが痛い。 暗号化はAESで行われており、バックアップ時にパスワードを入力させ、インポート時にそのパスワードが必要となるので鍵は毎回個別に作成されていると思われ、第四弾のアプリのような脆弱性はない。 ただ、このような仕様にしているということは、普段のデータ格納時はパスワードすら暗号化されていないのだろうか(あくまで推測。未確認)。 また、バックアップファイルからパスワードを複合化するのは困難とはいえ、アカウントが全てダダ漏れてしまうというのは個人的には許容範囲を超えているためアンインストール。

2013年6月16日日曜日

パスワード管理アプリレビューその4 [Android]

パスワード管理アプリレビュー第四弾。まだ検索結果1ページ目のアプリです。有料版は無いようです。

アプリ名
MKパスワード管理ぱぱっと入力
Developer
三浦 健一郎 (Kenichiro Miura)
URL(GooglePlay)
https://play.google.com/store/apps/details?id=mk.android.FastPass
広告表示
Good Point
  • マッシュルーム対応
  • DropBox連携機能あり
Bad Point
  • マスターパスワードの設定欄を伏字にすることができず画面上に生で表示される
  • リストア時にバックアップファイルをリネームする必要がある
  • 暗号化方式が貧弱(というか脆弱)
  • DeveloperのWebサイトがない
  • アプリ上からワンタッチコピーできない
  • デザインがいまいち
結論
アンインストール

正直他のアプリに比べていいところが見つからないです。DropBoxと連携できるのはいいと思うのですが、肝心の出力ファイルを開いてみると、暗号化されているのはアカウント名とパスワードだけで、それらの暗号化後の文字列を見ると、これそもそも暗号化か?という文字列が記載されてます。文字を別の文字で置き換えただけでパディングもなし。例えば1は!に、2は?に置き換えるといった形式。あるエントリのパスワードが 123 でファイル中の文字列が !?% なら、ファイル中にある %?! は絶対に 321 です(※あえてアプリで実際に使用されている置換文字とは変えてあります)。インポート時にマスターパスワードを要求されるでもないので、恐らく環境ごとに置き換える文字が変わったりもしないでしょう。小学生でも容易に解けてしまう暗号です・・・。ファイルが漏れてしまったら終わりですね。

2013年6月15日土曜日

パスワード管理アプリレビューその3 [Android]

パスワード管理アプリレビュー第三弾も、第二弾と同じくGoogle Playで「パスワード管理」で検索して上位に出てくる以下のアプリを入れてみました。有料版は無いようです。

アプリ名
パスワード管理帳(パスメモ)
Developer
NIPPON SYSTEMWARE CO.,LTD.
URL(GooglePlay)
https://play.google.com/store/apps/details?id=jp.co.nsw.android.passmemo
広告表示
Good Point
  • Developerが東証一部上場企業でまず漏洩の恐れはないと思われる
    ※ただしマーケティング利用もないとは言い切れない。それについては何も明記されていないので不明。
  • マッシュルーム対応
  • デザイン
  • バックアップファイルが暗号化されていてリストアも直接可能
  • カテゴライズ可能
  • ソート可能
  • 広告が誤クリックしにくい場所に配置されている
Bad Point
  • マスターパスワードの入力欄を伏字にすることができず画面上に生で表示される
  • バックアップファイルの格納場所が内蔵ストレージで変更できずパス表示もされない
    ※v2.0.2で修正したと書かれていたがXperiaでは内蔵のままだった
結論
キープ!

今までの3本の中では、Developerの信頼性、ソフトの品質共にぴか一。マスターパスワードの入力欄を伏字にできないのは痛いがそれ以外に特に問題はない。これを超えるソフトは出てくるかなー?

パスワード管理アプリレビューその2 [Android]

パスワード管理アプリレビュー第二弾は、第一弾と同じくGoogle Playで「パスワード管理」で検索して上位に出てくる以下のアプリを入れてみました。有料版もありますが、無料限定で探しているので無料版のレビューです。

アプリ名
パスワード管理ソフト ぱすわ~ど帳(マッシュルーム対応)
Developer
waiwai
URL(GooglePlay)
https://play.google.com/store/apps/details?id=jp.android.passworder
広告表示
Good Point
  • Developerがアンドロイダー公認なので安心感あり
  • マッシュルーム対応
Bad Point
  • マスターパスワードの登録・変更も通常のアイテムのパスワード登録・変更も伏字にすることができず画面上に生で表示される
  • リストア方法が非常にややこしい
  • 暗号化無しでバックアップしないとバージョンアップ時や機種変時にリストアできない
結論
バックアップ・リストアまわりの改善に期待しつつアンインストール。

Developerのブログを読むと、善人であることは疑いない感じ。データが抜かれる恐れはなさそう。パスワードがモロ表示されてしまうのには結構抵抗があるが、それはまあ登録時だけのことと思えばなんとか許容範囲か。バックアップが非暗号化状態でないとバージョンアップ時や機種変更時に戻せないのは許容範囲を超えているので残念ながら不採用。

2013年6月14日金曜日

パスワード管理アプリレビューその1 [Android]

スマホでのパスワード入力ってすごくストレス高くないですか?私には高いです。ということで自分用にパスワード管理アプリを探しているのでついでにレビューとして記録しておこうと思います。第一弾の今回は、Google Playで「パスワード管理」で検索してかなり上のほうに出てきた以下のアプリを入れてみました。ちなみに、無料限定で探します。

アプリ名
パスワード管理マネージャー(ぱすわーど保存・ロックアプリ)
Developer
Password Security Manager
URL(GooglePlay)
https://play.google.com/store/apps/details?id=jp.co.futaba.password.security
広告表示
Good Point
  • シンプル
  • デザインが良い
Bad Point
  • ロック解除時に音が鳴る(OSが4.0で確認。2.3のときには出なかった)
    音を消す方法も不明
  • アイコンのロゴの使用許諾をとっているのか不明
  • マーケティング手法が嫌な感じ(過剰アピール、アプリ紹介画面の大量キーワード羅列、アプリ起動後の星5レビュー依頼POPUPなど)
  • DeveloperのWebサイトがない
  • バックアップ・リストアができない
    (バージョンアップ時にはバックアップしろと書いてあるがバックアップ方法の説明もない)
  • ソートできない
結論
無し。アンインストール。

アプリ自体がどうのよりも、Developerの怪しさが怖い。広告があるのは無料なので仕方がないが、広告があるということはネットワーク通信のパーミッションがあるということであり、それはつまりデータを抜かれる可能性があるということだ。そうなるとせめてDeveloperの健全さを知りたいのに、Webもないのは怖い。「プロのデザイナーが・・・」という記載や、「チーム一同・・・」という記載が出てくるのに、その組織のページが無いのはおかしくないだろうか。まだ個人が1人でせっせと作ってます、のほうが信じられる。アピールも過剰すぎ。怖くて無理です。

2013年6月13日木曜日

ソフトウェアキーボードを隠す [Android]

画面遷移直後に出るのを防ぐ

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
 setContentView(R.layout.hoge);
}

編集が終わった後に引っ込んでもらう

ボタンクリックのリスナー等に以下のコードを仕込む。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

2013年6月12日水曜日

一部にだけテーマが反映されない [Android]

一部にだけテーマが反映されなかったら getApplicationContext() を探せ!!

原因を探すのに計6時間かかりました・・・。
ListActivity の中の ImageButton にだけテーマが反映されず、xml の定義が間違っているのかとか、ListActivity が悪いのかと思って普通の Activity + ListView に変えたりとか、バグがあるのかとググりまくったりとか、色々しまくったのですが、原因は Adapter の引数に this ではなく getApplicationContext() を指定していたことでした。それを this に変えたらすっきり反映されてくれました。

2013年6月8日土曜日

AESで暗号化

暗号化

//元データ
String str1 = "hoge";
String str2 = "foo";
String str3 = "bar";

try {
    Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");

    //鍵準備
    try {
        //鍵ファイルがある場合はファイルから読み込む
        FileInputStream in = openFileInput("key");
        byte[] keybyte = new byte[in.available()];
        in.read(keybyte);
        in.close();
        SecretKeySpec skey = new SecretKeySpec(keybyte,"AES");
        c.init(Cipher.ENCRYPT_MODE, skey);
    } catch(Exception e) {
        //鍵ファイルがない場合はランダムに生成
        KeyGenerator generator = KeyGenerator.getInstance("AES");
        generator.init(256, SecureRandom.getInstance("SHA1PRNG"));
        Key key = generator.generateKey();
        //鍵をファイルに保存
        FileOutputStream out = openFileOutput("key", MODE_PRIVATE);
        out.write(key.getEncoded());
        out.close();
        c.init(Cipher.ENCRYPT_MODE, key);
    }

    //暗号化
    byte[] enc_str1 = c.doFinal(str1.getBytes());
    byte[] enc_str2 = c.doFinal(str2.getBytes());
    byte[] enc_str3 = c.doFinal(str3.getBytes());

    /* 暗号化したデータをbyte[]のままどこかに保存
    Stringとかに変換すると壊れるので注意 */

    //IVを保存
    byte[] iv = c.getIV();
    /* これもbyte[]のままどこかに保存 */

} catch(Exception e) {
    e.printStackTrace();
}

複合化

//暗号化データがbyte[]で enc_str に、IVがbyte[]で iv に格納されている前提 */

//鍵をファイルから取得
byte[] key;
try {
    InputStream is = openFileInput("key");
    key = new byte[is.available()];
    is.read(key);
    is.close();
} catch(IOException e) {
    e.printStackTrace();
}

//複合化
SecretKeySpec keyobj = new SecretKeySpec(key,"AES");
try {
    Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec ips = new IvParameterSpec(iv);
    c.init(Cipher.DECRYPT_MODE, keyobj, ips);
    Log.d("TEST", new String(c.doFinal(enc_str)));
} catch(Exception e) {
    e.printStackTrace();
}

2013年6月4日火曜日

今日はまったことメモ

その1。SQLite にデータが登録されない。エラーもでない。 → execSQL しなければならないところで rawQuery してました。アホだ・・・。それにしても何のエラーも出ないのね。

その2。startActivity(intent) しても処理は続く。条件分岐で別の Activity に飛ばす場合は注意。
例えば

if (a == 1) {
 Intent i1 = new Intent(TestActivity.this, NextActivity.class);
 startActivity(i1);
}
Intent i2 = new Intent(TestActivity.this, AnotherActivity.class);
startActivity(i2);

というコードを書いてしまうと、a が 1 のときでも NextActivity ではなく AnotherActivity に飛ばされてしまう。 startActivity の後に処理が続かないように後ろのコードは else に入れてやらないとダメ。

2013年6月3日月曜日

ファイルの読み書き

読みその1(stream)

try {
 InputStream is = openFileInput("filename");
 BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
 String line;
 while ((line = reader.readLine()) != null) {
  //処理
 }
 reader.close();
} catch(IOException e) {
 e.printStackTrace();
}

読みその2(bytes)

byte[] contents = null;
try {
 FileInputStream is = openFileInput("filename");
 contents = new byte[is.available()];
 is.read(contents);
 is.close();
} catch(IOException e) {
 e.printStackTrace();
}

書きその1(stream)

String s = "I want to write this message.";
try {
 OutputStream os = openFileOutput("filename",MODE_PRIVATE);
 PrintWriter writer = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
 writer.append(s);
 writer.close();
} catch(IOException e) {
 e.printStackTrace();
}

書きその2(bytes)

String s = "I want to write this message.";
try {
 FileOutputStream os = openFileOutput("filename",MODE_PRIVATE);
 out.write(s.getBytes());
 out.close();
} catch(IOException e) {
 e.printStackTrace();
}

Eclipseがおかしくなったら

LogCat が表示できない、エミュのマネージャが起動しない
ビューを作成できませんでした: プラグイン "com.android.ide.eclipse.ddms" は、クラス "com.android.ide.eclipse.ddms.views.LogCatView" をインスタンス化できませんでした
コマンドプロンプトで eclipse.exe -clean で解決。
ソースが赤×だらけ
メニューの[プロジェクト]→[クリーン]で解決。

2013年6月2日日曜日

フォームからのデータ受け取り

EditText

Button mButton = (Button)findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener() {
 public void onClick(View v) {
  EditText mEdit = (EditText)findViewById(R.id.edit1);
  String hoge = mEdit.getText().toString();
  //処理
 }
});

2013年6月1日土曜日

クリップボード操作

ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
//SET
cm.setText("copy");
//GET
CharSequence c = cm.getText();