pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

暗号化技術メモ

公開鍵暗号

・暗号化共通鍵を安全に交換するのに使える。

デジタル署名

・署名対象データ(以降メッセージ)をハッシュ化した文字列を、秘密鍵で暗号化したもの
・メッセージとハッシュアルゴリズム、デジタル署名を相手に送る
・相手は受信データをハッシュ化し、デジタル署名と比較する

デジタル署名の仕組み

デジタル証明書。

・公開鍵(上記図の主体者公開鍵情報)を相手に渡す手法
・おおまかに以下の情報を含む
 所有者、所有者の公開鍵、証明書メタ情報(バージョン等)、発行者、発行者が付与した署名
・X509が主流規格
・X509フォーマットは以下

X.509とは - @IT

ポイント!!

・tbsCertificateをデジタル署名したのがsignatureValue(上述の「発行者が付与した署名」)
・デジタル証明書を受信したホストは以下ができる。
 自分が信頼する証明機関が発行した公開鍵で、signatureValueを復号化できれば、発行者を信頼できる
 tbsCertificateをハッシュ化したデータとsignatureValueが一致すれば、tbsCertificate(公開鍵も含む)が改ざんされてない事を確認できる

デジタル署名技術的には以下の対応
tbsCertificate=メッセージ
signaturealgorism=ハッシュ関数
signaturevaiue=デジタル署名

S/MIME

・以下2機能あり
 1) デジタル署名による送信者認証
 2) 本文暗号化
・どちらか片方だけの利用も可能
・ヘッダは暗号化・署名対象にならない

https://www.ipa.go.jp/security/pki/072.html#:~:text=S%2FMIME%20%E3%81%AF%E3%80%81%E6%9A%97%E5%8F%B7%E5%8C%96,%E3%82%92%E6%8B%A1%E5%BC%B5%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82

Java用語メモ

Java SE、JREJDKJava EE

項目 正式名称 説明
Java SE Java Standard Edition Java基本ライブラリ
JRE Java Runtime Edition Java実行環境(JVM等)
JDK Java SE Development Kit JRE + Java開発キット、コンパイラもこれに含まれる
Java EE Java Enterprise Edition Java SE + Webアプリ用ライブラリ

 

補足

Java SE、JREJDKは同バージョン管理
Java SEとJDKはセット
Java SEをインストールする=JDKをインストールな感じ(Java SEはEEに対する概念では?)
 Java SE - Downloads | Oracle Technology Network | Oracle
 →Java SEダウンロードのリンク先がJDKダウンロード画面
 

考え方

Javaアプリを動かす!→JRE
Javaでアプリ作る!→Java SE & JDK
JavaでWebアプリ作る!→Java EE & JDK
 

クラス(Class)とは?

Javaプログラムをコンパイルしたもの(中間コード)
 

Javaアプリケーション、アプレットサーブレットJSP

項目 Class実行場所 必要コンポーネント 説明
Javaアプリケーション 実行ホスト JRE Javaデスクトップアプリ等
アプレット クライアント(ブラウザ経由) JRE もう非推奨
サーブレット サーバ Java EE HTML出力をコード内に記述・コンパイル
JSP サーバ Java EE HTML内にJavaコード書ける・コンパイル不要

 

サーブレットの不便を解消したのがJSP

サーブレットの不便さ
・HTMLを少し変更したいだけでもコンパイル必要
・画面見ながら開発できない(Javaソースの中にHTMLが書かれてるので)
 
JSPは初回実行時にコンパイルされサーバ上に保管される為、性能的にも悪くない。

JAVA VMとは

JAVA概念

どこでも動く

f:id:pikesaku:20200801130808p:plain

javacコマンドでコンパイルし中間コード(バイナリ)を生成
jarファイルは中間コードの集まり
javaコマンドがJAVA VMで、jarファイルを実行

ガベージコレクションとは

プログラムが確保したが、不要になったメモリ領域を自動開放する言語の機能

・確保済み領域の要否を自動判断
 変数やオブジェクトから参照されてるか?で判断
・開発者がメモリ開放処理を忘れても、安全に開放する。
 

メモリリーク(解放漏れ)を防ぐ
×システム負荷増

 

プログラムが確保するメモリ領域の種類

タイプ 確保・解放 割当容量
ヒープ領域 任意に可能 不定
スタック領域 順番あり(下→上・上→下) 固定

 
ヒープ領域とは?スタック領域との違いや具体的な管理方法を解説!|ITトレンド
「LINUXのヒープ領域について」(1) Linux Square − @IT
 
ヒープ領域は使いやすいが、メモリリークが発生しやすい。
ガベージコレクションは、ヒープ領域のメモリリークを防ぐ。
 

ヒープ領域にはNewとOld領域がある

タイプ 格納されるオブジェクトの寿命
New 短い
Old 長い

 

ガベージコレクションの種類

タイプ 対象領域 発生頻度 効果 負荷
Scavenge GC New
Full GC All

Full GCは非常に重い処理で、動くとアプリ応答遅延が発生する。
なので、動かないようにすべきもの。

PowerShellでO365認証情報セット

Get-Credentialだと対話式になる。
平文 ID Password から 資格情報を作成する

C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

に以下を記載した

$SecurePassword = ConvertTo-SecureString -String 'PASSWORD'-AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential('ID', $SecurePassword)

PowerShellでO365管理するときの留意事項

一部コマンドレットでエラー処理を正しくできない

Tryステートメントでエラー制御できず、Catch処理にまわせない。
$?と$Error[0]を見て、エラー処理をコードする必要ある。

-FileterパラメタとWhereオブジェクトの違い

Get-User -Filter {条件}
Get-User | where {条件}
結果は同じだが、フィルタ処理が実施される場所の違いあり。
Filter→O365
パイプ→端末
Filterは通信トラフィック低減できる

PowerShell勉強

コマンドレットの探し方

ワイルドカード指定で候補のコマンドレット表示が可能

> Get-*Permission

Get-Commandでも同様の事が可能

> Get-Command Get-*Permission

Get-historyコマンドで履歴確認

コマンドレットは[動詞]+[名詞]の命名規則あり

Getは参照系。コマンド名からリスク判定可能。学習コスト軽減。

Get-Command -Noun [機能]

Nounは名詞の意味
特定の機能に関するコマンドレット一覧の出力が可能

Get-Verb

[動詞]の一覧を出力

ヘルプの見方

Get-help コマンドレットでオンラインヘルプ表示可能

-?

ヘルプ表示

PowerShell起動時にスクリプト実行が可能

よく使う環境変市数設定等の自動化が可能
以下にファイルを生成する(全ユーザー適用)
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

コマンドレット共通

-?

ヘルプ表示

-WhatIf

ドライラン

-Confirm

実行確認の指定($true確認、$false確認しない)

-ErrorAction

例外発生時の処理指定
Continue(規定) エラー表示し続行
Stop エラー表示し停止
SilentContinue エラー表示せず処理継続

-Verbose

詳細情報出力

-Debug

詳細情報出力(開発者向け)

実行方法

`でコマンドを複数行に分けて記載できる

コマンドA; コマンドBで1行で複数コマンド実行

コマンドを記述したps1ファイルを実行可能。

ps1ファイルのパスにスペース含む場合は以下で実行

& 'パス'

変数定義方法

$で始まり、英数字、アンダースコアで定義

大文字小文字区別しない

${}で上記以外の文字も利用可能

> ${-a-} = "a"
> Write-Host ${-a-}
a

変数はオブジェクト。型は動的に決定。

型変換は以下で可能。

> $a = "a"; $b = 1
> $a + $b
a1
> $b + $a
値 "a" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:1
+ $b + $a
+ ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) []、RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger
> [string]$b + $a
1a

ショートカットと.NET Framework完全クラス名

[string]→[System.String]
ショートカットは他に以下があり。
[datetime]、[double]、[single]、[int]、[bool]

自動変数

自動的に設定される変数

変数名 内容
$_ パイプで渡す前のコマ。ンドの出力
$? 直前コマンドの終了ステータス
$args 引数リスト

他にもたくさんある。
PowerShellの環境変数と自動変数 - Qiita
【連載】PowerShell Core入門 - 基本コマンドの使い方 [16] 自動変数|サーバ/ストレージ|IT製品の事例・解説記事
Get-Variableコマンドで一覧表示可能

パイプ処理

オブジェクト渡し
オブジェクトを受ける主要コマンドは以下。エイリアスあり。

コマンドレット エイリアス 内容
Select-Object select 限定・追加
Sort-Object sort 並べ替え
Where-Object whereまたは? 並べ替え
ForEach-Object foreachまたは% ループ実行

上記は出力加工で使われる。
一括処理でもパイプは利用される。同一機能のコマンドレットのGet-* | Set-*
別機能でも利用可能なケースもあり 例) Get-User ...| Get-MailboxStatistics

サンプル

> Get-Process | Sort-Object CPU -Descending | select -First 5
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                         
-------  ------    -----      -----     ------     --  -- -----------                                                                         
   2091      71   118912     188896     173.08  10484   1 chrome                                                                              
   1062      40   194092     223228     159.64  10692   1 chrome                                                                              
    234      13     2680      11668     122.94   9340   1 DCSHelper                                                                           
   3027     127    91668     174568      72.69   2248   1 explorer                                                                            
    795      56   182292     217188      57.92  10404   1 powershell_ise                                                                      
>

文字列の扱い

"で囲う
"を文字列内で使う場合は、
①""
②\"(エスケープ文字`を利用)
"内の変数は展開される
展開したくない場合、変数記述をエスケープする

> Write-Host $hoge
a
> Write-Host `$hoge
$hoge

特殊文字(改行等)は以下で利用可能
\0(NULL)、`b(バックスペース)、`t(タブ)、`r(CR)、`n(改行)
変数、特殊文字を展開したくない場合、'で囲う'を'内で使いたい場合は、
①''
②\'(エスケープ文字`を利用)

ヒアドキュメント

@"~"@ 変数展開あり
@'~'@ 変数展開なし