HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
English Translate 中文翻訳
LINK
BACK
 

[NEW] 2020/01/11

GO言語で RSA暗号処理する方法、OpenSSLとの連携方法 GO言語で RSA暗号処理する方法、OpenSSLとの連携方法

(GO言語で 公開鍵暗号方式の RSA暗号処理と OpenSSLと連携する方法を解説)

Tags: [Windows], [無人インストール]





● Microsoft Visual Studio 2013の C# .NETで RSA暗号処理する方法、OpenSSLとの連携方法

[NEW] 2020/01/11
Visual Studio 2013の .NET C#で RSA暗号処理する方法、OpenSSLとの連携方法
Visual Studio 2013の .NET C#で RSA暗号処理する方法、OpenSSLとの連携方法

  C# .NETで公開鍵暗号方式の RSA暗号処理と OpenSSLと連携する方法を解説


● Windowsで OpenSSLを使用して RSA暗号の暗号化、復号化をコマンドラインで実行する方法

[NEW] 2020/01/11
OpenSSLコマンドを使って RSA暗号処理する方法
OpenSSLコマンドを使って RSA暗号処理する方法

  OpenSSLコマンドで公開鍵暗号方式の RSA暗号処理する方法を解説


● Java言語で RSA暗号処理する方法、OpenSSLとの連携方法、Androidにも対応

 PHP言語を使用して RSA暗号処理を試してみます。
 2020年になり、情報セキュリティの関係で今後ますます暗号化の需要が高まると思います。

 と言う訳で RSA暗号処理を実装できる様になります。


● RSA公開鍵暗号方式とは?

 RSAは公開鍵暗号方式で「公開鍵」「秘密鍵」の2種類のペアの鍵を用います。暗号と復号の鍵が異なるので「非対称暗号方式」とも言います。

 「公開鍵」=公開しても良い鍵
 「秘密鍵」=秘密にする鍵

 暗号と復号の鍵が同じものは「対称暗号方式」と言います。

 RSA暗号の鍵のビット長は現在は 2048bit以上が推奨されています。
 1024bit長の鍵は現在では既に「解読」されます。
 (現在のコンピュータの処理能力で短時間で演算処理して「秘密鍵」を求める事ができる)

 2048bit長の鍵の推奨される利用期間は 2030年末までとされています。
 (少なくとも暗号アルゴリズムの安全性が確保されると見込まれる期間)
 (現在のコンピュータの進化では 2050年頃には 2048bit長の RSA鍵が危殆化すると予想されています)

 現在が 2020年で、2030年までは 10年しかないのと、昨今のコンピュータの進化速度から 2048bit長でも不安があります。

 このぶんだと先を見越して 3072bit位を使用しておくのが「安全」と思います。
 ただし、ビット長が増加すると暗号化・復号化の処理の負荷が増加します。
 また、効率的な演算手法が「発見」された場合、そもそも RSA暗号方式そのものが「無力」になる可能性もあります。

● 各種暗号、ハッシュ関数の 2030年問題の一覧表

 2031年からは Security Strength 128以上が必須となる。
 (Security Strength 128未満は古いシステム用に「使用だけ」は許可 Legacy use)

NIST Special Publication 800-57 Recommendation for Key Management
Page 52 Table 2: Comparable strengths
Page 54 Table 3: Hash functions that can be used to provide the targeted security strengths
Page 55 Table 4: Security-strength time frames
 より引用して合成して作成

暗号強度公開鍵暗号
RSA暗号方式
鍵ビット長
公開鍵暗号
ECDSA暗号方式
(楕円曲線暗号)
鍵ビット長
共通鍵暗号
AES暗号方式
鍵ビット長
SHAハッシュ関数HMAC 暗号ハッシュ関数2030年末まで2031年以降
80以下
(112未満)
10241602TDEASHA-1--×
Legacy use
×
Legacy use
11220482243TDEASHA-224、SHA-512/224--×
Legacy use
1283072256AES-128SHA-256、SHA-512/256SHA-1
1927680384AES-192SHA-384SHA-224、SHA-512/224
25615360512AES-256SHA-512SHA-256、SHA-512/256

● EMVCoの資料
EMV SWG NH90 Notice Bulletin No. 23 July 2019 EMVCo Annual RSA Key Lengths Assessment
 より引用
RSA暗号方式
鍵ビット長
利用期限特定用途での延長
1408-bit2024年末まで2025年末まで
1984-bit2029年末まで--

● CRYPTREC Report 2016
CRYPTREC Report 2016
CRYPTREC Report 2016の公開 平成29年6月30日

 付録 A.3 予測図の更新(素因数分解問題及び楕円曲線上の離散対数問題の困難性)より引用

・CRYPTREC Report 2016 付録 A.3 予測図の更新(素因数分解問題及び楕円曲線上の離散対数問題の困難性)
CRYPTREC Report 2016 付録 A.3 予測図の更新(素因数分解問題及び楕円曲線上の離散対数問題の困難性)




● 暗号用語

 平文 = 元の文
 暗号文 = 暗号化した文
 暗号化 = 平文を暗号化して暗号文にする事
 復号化 = 暗号文を解読して平文に戻す事


● RSA公開鍵暗号方式の基本的な使い方

 その1:「送信者」が「受信者」だけに「メッセージ」を届ける場合
 ・「受信者」は「公開鍵」「秘密鍵」のペアの RSA鍵を生成する
 ・「送信者」は「受信者」から「公開鍵」を受け取る
 ・「送信者」はその「公開鍵」を使って「メッセージ」を暗号化する
 ・「送信者」は「暗号化メッセージ」を「受信者」に送信する
 ・「受信者」は「暗号化メッセージ」を「自分の秘密鍵」で復号化する
 ・「受信者」は「復号化メッセージ」を読む

 その2:「送信者」が自分である事を「受信者」に「認証・証明」したい場合
 ・「送信者」は「公開鍵」「秘密鍵」のペアの RSA鍵を生成する
 ・「送信者」は自分の「秘密鍵」を使って「メッセージ」を暗号化する
 ・「送信者」は「暗号化メッセージ」を「受信者」に送信する
 ・「受信者」は「暗号化メッセージ」を送信者の「公開鍵」で復号化する
 ・正常に復号化できれば「送信者」本人が送信した「メッセージ」である事が「認証・証明」できる

使い方目的暗号化復号化補足
その1メッセージの秘匿送信「受信者」の「公開鍵」「受信者」の「秘密鍵」受信者以外は暗号化メッセージを解読できない
その2自分である事の認証・証明「送信者」の「秘密鍵」「送信者」の「公開鍵」送信者以外は暗号化メッセージを作れない


● RSA公開鍵暗号方式の基本的な暗号強度の考え

 ある素数pとq、p*q=nの3個の数値がある場合に、
 ・p*qを演算してnを求めるのは簡単
 ・nの値から素数のpとqを求めるのは困難(pとqは素数である事)

 RSA暗号の暗号解読の難易度は、素数同士の積を求める事は(掛け算するだけだから)簡単であるが、逆に素数同士の積の値から素因数分解を求めるのが難しいと言う一方向性の数学的性質を利用しています。

 この場合、
 ・pとqが秘密鍵
 ・nが公開鍵
 になります。

RSA暗号 - Wikipedia

 面白記事
世界最小のRSA鍵ペアは何bitか
続・世界最小のRSA鍵ペアは何bitか

●楕円曲線暗号 Elliptic Curve Cryptography ECC

 楕円曲線を利用した暗号方式の総称で、RSAと同様の「公開鍵暗号」も実装できる。
 楕円曲線上の離散対数問題 (EC-DLP) の困難性を安全性の根拠とする暗号。
 楕円曲線暗号で有名なものとして ECDSAや ECDH等がある。

 RSA暗号などと比べた場合に同レベルの安全性をより短い鍵で実現でき、処理速度も速いのが利点。

楕円曲線暗号


● 公開鍵暗号は「ゴルゴ13」のデューク・トウゴウも関係しています。「最終暗号」

 ゴルゴ13 「最終暗号」

 数学者の佐久シゲルが解読不可能な暗号方式(最終暗号)を開発し、一般に公開しようとするのをアメリカの NSA(国家安全保障局)が妨害すると言うお話。

 なぜ妨害するかと言うと「解読不可能な暗号方式」で通信を行なわれると NSAが傍受・盗聴して通信内容を監視する事ができなくなるから。

 ゴルゴ13 デューク・トウゴウは佐久シゲルの学会での講演を聞き、その内容の意味(最終暗号の理論)を理解し、その最終暗号の開発が無事に完成する様に、また、NSAからの妨害工作から佐久シゲルを守るべくボディガードと支援を申し出る事にした。。。

 なお、既に各方面からツッコミが入っていますが「最終暗号」作中の「平方根を求める事は難しくても、~」の部分は誤りで、平方根を求めるのは「開平法」で手計算でも(頑張れば)できます。

 佐久シゲルのモデル 小平邦彦
小平邦彦
 小平次元、小平消滅定理、小平・スペンサー理論等に名を残している。

 NSA(アメリカ国家安全保障局)による市販ソフトウェアに仕込まれたバックドア(裏口)
NSA's Backdoor Key from Lotus-Notes
 "1984" O=MiniTruth CN=Big Brother


ゴルゴ13 (Volume108) 最終暗号 (SPコミックスコンパクト) (日本語) コミック - 2007/9/28
ASIN: 4845830612

ゴルゴ13 (129) (SPコミックス) (日本語) コミック - 2003/7/5
ASIN: 4845801299

ゴルゴ13 THE LAST CODE〜最終暗号〜 (My first big) (日本語) ムック - 2015/8/7
ASIN: 4091198481

暗号解読(上) (新潮文庫) (日本語) 文庫 - 2007/6/28
ASIN: 410215972X


● GO言語で RSA暗号の鍵を扱う場合の参考資料

Package rsa
 Package rsa implements RSA encryption as specified in PKCS#1 .
func GenerateKey(random io.Reader, bits int) (*PrivateKey, error)
func (priv *PrivateKey) Public() crypto.PublicKey
func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) ([]byte, error)
func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)

Package x509
 Package x509 parses X.509-encoded keys and certificates .
func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte
func MarshalPKCS1PublicKey(key *rsa.PublicKey) []byte
func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error)

func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)
func ParsePKCS1PublicKey(der []byte) (*rsa.PublicKey, error)
func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)

Package pem
 Package pem implements the PEM data encoding, which originated in Privacy Enhanced Mail . The most common use of PEM encoding today is in TLS keys and certificates . See RFC 1421 .
func Decode(data []byte) (p *Block, rest []byte)



● GO言語で RSA暗号処理する方法

 GO言語で RSA暗号化処理のサンプルプログラム

 PHPで作成した秘密鍵 pemと暗号文を GO言語で読み込んで復号化処理のサンプルプログラム

● GO言語のサンプルプログラムの実行方法
go run rsa_test.go

rsa_test.go
package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/pem"
    "io/ioutil"
    "fmt"
    "os"
)

func main() {

    // Generate RSA Keys
    privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)

    // Save PrivateKey to Der file
    {
        derPrivateKey := x509.MarshalPKCS1PrivateKey(privateKey)
        f, _ := os.Create("go_PrivateKey.der")
        _, _ = f.Write(derPrivateKey)
        _ = f.Close()
    }

    publicKey := &privateKey.PublicKey

    // Save PublicKey to Der file
    {
        derPublicKey := x509.MarshalPKCS1PublicKey(publicKey)
        f, _ := os.Create("go_PublicKey.der")
        _, _ = f.Write(derPublicKey)
        _ = f.Close()
    }

    fmt.Println("Private Key : ", privateKey)
    fmt.Println("Public key ", publicKey)

    // Encrypt Message
    message := []byte("ABCDEF GO language RSA test")

    ciphertext, _ := rsa.EncryptPKCS1v15(rand.Reader, publicKey, message)

    fmt.Printf("Encrypted [%s] to \n[%x]\n", string(message), ciphertext)
    fmt.Println()

    // Save Encrypt Message
// opensslコマンドで秘密鍵で復号化する
 //$ openssl rsautl -decrypt -inkey go_PrivateKey.der -keyform DER -in go_ciphertext.dat -out go_decode_test_data.txt
 //$ cat go_decode_test_data.txt
    {
        f, _ := os.Create("go_ciphertext.dat")
        _, _ = f.Write(ciphertext)
        _ = f.Close()
    }

    // Decrypt Message
    plainText, _ := rsa.DecryptPKCS1v15(rand.Reader, privateKey, ciphertext)

    fmt.Printf("Decrypted [%x] to \n[%s]\n", ciphertext, plainText)

    // DER形式の読み込み
    {
        bytes, _ := ioutil.ReadFile("go_PrivateKey.der")
        privateKey, _ = x509.ParsePKCS1PrivateKey(bytes)
    }

 /*
    // -----BEGIN RSA PRIVATE KEY-----
    {
        bytes, _ := ioutil.ReadFile("privKey.pem")
        decodeBlock, _ := pem.Decode(bytes)
        privateKey, _ = x509.ParsePKCS1PrivateKey(decodeBlock.Bytes)
        // Precompute()は無くても動くが、Precompute()すると処理の高速化に貢献する
        privateKey.Precompute()
    }
 */

    // -----BEGIN PRIVATE KEY-----
    {
        bytes, _ := ioutil.ReadFile("privKey.pem")
        decodeBlock, _ := pem.Decode(bytes)
        privateKeyIf, _ = x509.ParsePKCS8PrivateKey(decodeBlock.Bytes)
        privateKey, _ = privateKeyIf.(*rsa.PrivateKey)
        // Precompute()は無くても動くが、Precompute()すると処理の高速化に貢献する
        privateKey.Precompute()
    }

    {
        ciphertext, _ := ioutil.ReadFile("test_data.enc")
        plainText, _ = rsa.DecryptPKCS1v15(rand.Reader, privateKey, ciphertext)
        fmt.Printf("from PHP Decrypted [%x] to \n[%s]\n", ciphertext, plainText)
    }
}


●実行結果
$ go run rsa_test.go
Private Key :  &{{25402711108532565594924188408254858835517891951501728002523800214932910750205385638316126308267838701452290484429595428323766728202073004795565815255676977426589655964728750486246878189308882394028391947140848058495213613123393525382936457665252816227276156088976924512076484545001827438193463899430659837235201403162310666327561287561267640029270797034642261236190049748188939136601491214221024059062628539333308501640856446656520359592235408493265246713851878700387592080872982438664378760230280679846903107491806137408767240942239152480312023507044683958938953713070611013436199605389870957519318344150481402464809 65537} 3400103481148781076318338964511827238127514964044328517297691006384050125895320854163435310986549294126058442245089203003739593508835991852948766825194904343898018861446215103916224658995949102955842564663007448755970120913658055825855907451357213542665462886804485738131664898130155946836642893721191816717646237291383425472877123759256738445855276896433552551227609270868492936387735420689121184466256278615678685564618476874286184652265043527368382267859507988593128048521731024956437665239703489818456485151274443939674536547650697783593197965398650136671879326588263832792962931890031522095578254011357167993153 [147062990817507924101430840751270599135095101051128268614796449752356226956486948321980669803790096546237528179906914084805784084839205623525401494737088836629412394568671208636678096676333601226121913737090657644966665334021602166728908377482551280565427712890880159608972771430202252880248024644120963845461 172733540691111525216803846552750241123243889636990976033549150590205621450405968395288821729764373973147807039563176106815614773755738021000484903484537350257514739203457812042058248276422271024773137740229247151574161823062080563999506481781542846286777775531412704060650036504470817774283266024564415048069] {134180365273413550049119711820238594166381535048190578605831339691958633246717023389248151907890697057827169919979764630896236708073990867209742706857179365474347979700448046014294268411096693759512732560585210866204231507593507837736268143795819710586238544944429406655448614377227732627787522798111862827153 109643640886068014236523490800531150811403418052379947251104638060218713891952458691182308985125928212810302162836689595854701536357152473772375482322302726257116028363578512610428050235731975443345934815349141424012163080998253680552656814350858025322031149764358583531791835430153745508799363208903057295873 95933012435222677309864798163991361842549023735686818404474231985834848471879723612846700078695209183289090680252414722170166161366085349777787390356306973389362117205784589848673873817540908469507023570129381576252750781013455650833268803331746174918620751226420135247674953168053720727757807593581185391245 []}}
Public key  &{25402711108532565594924188408254858835517891951501728002523800214932910750205385638316126308267838701452290484429595428323766728202073004795565815255676977426589655964728750486246878189308882394028391947140848058495213613123393525382936457665252816227276156088976924512076484545001827438193463899430659837235201403162310666327561287561267640029270797034642261236190049748188939136601491214221024059062628539333308501640856446656520359592235408493265246713851878700387592080872982438664378760230280679846903107491806137408767240942239152480312023507044683958938953713070611013436199605389870957519318344150481402464809 65537}
Encrypted [ABCDEF GO language RSA test] to
[7f966971c953750cffbb66eb2bec2ef0d99f404c966fb61c2b39021364026a26c8988439fc8c01c1b5be1412d8c56f0add4f3b92b1e00f4b11359d8e291bac668e6909e4678db553b04e640d1a42b3f700259c263b9cbe55b9552d51de6bb713a0cbdcf176c63723b3d7f24399b3d2377a46b9e5aadb228af81db56c074ef74126b1f0b05124ea229bb169df66a486d03ff910b70ae9b9a2eeec1efc90984fe3090645f57b1ef879a3b2b2596520aed582a0e277aa93c63dc370fcc4bc5f2c46f12705b79624fbfb006b0e4dea0cba6073522fa6b5a3999bb21ce0d2166a21911e7544b8acb5c1b76e199b1861df0dd9dae81e8c42bdfcb4e064155f198f5103]

Decrypted [7f966971c953750cffbb66eb2bec2ef0d99f404c966fb61c2b39021364026a26c8988439fc8c01c1b5be1412d8c56f0add4f3b92b1e00f4b11359d8e291bac668e6909e4678db553b04e640d1a42b3f700259c263b9cbe55b9552d51de6bb713a0cbdcf176c63723b3d7f24399b3d2377a46b9e5aadb228af81db56c074ef74126b1f0b05124ea229bb169df66a486d03ff910b70ae9b9a2eeec1efc90984fe3090645f57b1ef879a3b2b2596520aed582a0e277aa93c63dc370fcc4bc5f2c46f12705b79624fbfb006b0e4dea0cba6073522fa6b5a3999bb21ce0d2166a21911e7544b8acb5c1b76e199b1861df0dd9dae81e8c42bdfcb4e064155f198f5103] to
[ABCDEF GO language RSA test]

from PHP Decrypted [4fe170ffc2e0599379c2393573ccf4437244d759e5d6b121da05c48b2b421656ad38f07dccac2e8c2946e42cc2caba33376674b8fa3c186fff8cff485a909ce85e80ce78cc3e58b5d2e9cf93d36fcc8ec217da38fa0431fcb3f9c2e654add6c2877f417f5e5e030e43268238f4f1cda72f7eab735460cd5b0e661425b47a5c43] to
[plaintext data goes here]

$ ls -l go*.*
-rw-r--r-- 1 pi pi      256 Jan 14 11:15 go_ciphertext.dat
-rw-r--r-- 1 pi pi     1193 Jan 14 11:15 go_PrivateKey.der
-rw-r--r-- 1 pi pi      270 Jan 14 11:15 go_PublicKey.der

$ openssl rsautl -decrypt -inkey go_PrivateKey.der -keyform DER -in go_ciphertext.dat -out go_decode_test_data.txt

$ cat go_decode_test_data.txt
ABCDEF GO language RSA test



Tags: [Windows], [無人インストール]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

OpenSSLコマンドを使って RSA暗号処理する方法
OpenSSLコマンドを使って RSA暗号処理する方法

  OpenSSLコマンドで公開鍵暗号方式の RSA暗号処理する方法を解説

Java言語で RSA暗号処理する方法、OpenSSLとの連携方法、Androidにも対応
Java言語で RSA暗号処理する方法、OpenSSLとの連携方法、Androidにも対応

  Java言語で公開鍵暗号方式の RSA暗号処理と OpenSSLと連携する方法を解説

Visual Studio 2013の .NET C#で RSA暗号処理する方法、OpenSSLとの連携方法
Visual Studio 2013の .NET C#で RSA暗号処理する方法、OpenSSLとの連携方法

  C# .NETで公開鍵暗号方式の RSA暗号処理と OpenSSLと連携する方法を解説

PHP言語で RSA暗号処理する方法、OpenSSLとの連携方法
PHP言語で RSA暗号処理する方法、OpenSSLとの連携方法

  PHP言語で 公開鍵暗号方式の RSA暗号処理と OpenSSLと連携する方法を解説

Visual Studio 2013の C# .NETで Hash計算処理をする方法のサンプルプログラム
Visual Studio 2013の C# .NETで Hash計算処理をする方法のサンプルプログラム

  HashAlgorithm.TransformBlockを使用すると巨大ファイル等でハッシュ計算の進行状況の進捗を取得できます

Visual Studio 2013の .NET C#で UTF-8対応 QRコード生成・読取アプリを作成する方法、ZXing.Net QR Codeライブラリを使用
Visual Studio 2013の .NET C#で UTF-8対応 QRコード生成・読取アプリを作成する方法、ZXing.Net QR Codeライブラリを使用

  .NETで UTF-8対応 QRコード作成・解読アプリを作成、ILMergeで dllを exeに合体する方法

C# .NETで ZIPファイル解凍ツール UnZipをソースリスト 1行で自作する方法、Windows .NET専用
C# .NETで ZIPファイル解凍ツール UnZipをソースリスト 1行で自作する方法、Windows .NET専用

  Visual Studio 2013の C# .NET 4.5で ZipFile.ExtractToDirectoryを使い、UnZip解凍ツールを作成

Visual Studio 2013に Windows 10 SDK + UwpDesktopで UWPの機能を素の Windowsアプリから使用
Visual Studio 2013に Windows 10 SDK + UwpDesktopで UWPの機能を素の Windowsアプリから使用

  VS2013に Win 10 SDKをインストールして Uwp Desktopで UWPの機能を従来の Windowsアプリで動かす

Visual Studio 2013の C# .NETで 日本語対応の OCR文字認識アプリを自作する方法
Visual Studio 2013の C# .NETで 日本語対応の OCR文字認識アプリを自作する方法

  オフライン環境で動作可能な 世界各国語対応の OCR文字認識アプリを C# .NETで作成、MS製 OCRライブラリを使用

Visual Studio 2013の C#で日本語対応の手書き文字認識アプリを自作する方法
Visual Studio 2013の C#で日本語対応の手書き文字認識アプリを自作する方法

  オフライン環境で動作する世界各国語対応の手書き文字認識アプリを作成、MS製 手書き認識ライブラリを使用

Open XML SDKを使用して Officeのファイルを C#で自在に操る方法
Open XML SDKを使用して Officeのファイルを C#で自在に操る方法

  Microsoft Officeのファイルをプログラムで生成したり直接中身の読み取りができます

Visual Studioの各バージョンと開発できる .NET Frameworkの各バージョンのまとめ
Visual Studioの各バージョンと開発できる .NET Frameworkの各バージョンのまとめ

  .Microsoft.NET Framework Developer Packの各バージョンのダウンロードまとめ。言語パック等

Windows 10対応 Microsoft Speech使用の音声認識アプリ
Windows 10対応 Microsoft Speech使用の音声認識アプリ

  SpeechRecognizeApp 音声認識エンジンを使用してマイク入力の音声を認識します

Windows 10の音声合成エンジンを使用して入力した文字列を喋る & Waveファイル書き出し
Windows 10の音声合成エンジンを使用して入力した文字列を喋る & Waveファイル書き出し

  SpeechApp Windows 10用 Speech 音声合成 Text-to-Speech TTSのアプリ

Visual Studioの C#や MFC C++用のサンプルアプリのリンク集
Visual Studioの C#や MFC C++用のサンプルアプリのリンク集

  Visual Studioの C#や MFC C++でアプリを作る時の参考資料として

Windowsの Input Method Manager IMEや TSF Text Services Frameworkの公式情報源のまとめ
Windowsの Input Method Manager IMEや TSF Text Services Frameworkの公式情報源のまとめ

  Windowsで IME Input Method Manager関連のアプリを作成する時の情報 ImeTrayもこの辺を必死に読んだ

Visual Studioの C#で開発した .Netアプリの難読化をする方法
Visual Studioの C#で開発した .Netアプリの難読化をする方法

  C#で開発した .Netアプリの難読化は必須事項です、素の状態では簡単に内部を解析されます

Visual Studioの C#で開発した .Netアプリを逆コンパイルして、中身の実装を覗き見る方法
Visual Studioの C#で開発した .Netアプリを逆コンパイルして、中身の実装を覗き見る方法

  C#で開発した .Netアプリは比較的簡単に元のソースコードに戻せます

Visual Studio 2019 Professional v16.4を無人インストールする方法、完全自動でインストール
Visual Studio 2019 Professional v16.4を無人インストールする方法、完全自動でインストール

  VS2019 v16.4を完全オフラインインストール&コンポーネント選択の事前設定で自動インストールする

Visual Studio 2013 Professionalを無人インストールする方法、完全自動でインストール
Visual Studio 2013 Professionalを無人インストールする方法、完全自動でインストール

  VS2013を Update 5適用済みとコンポーネント選択の事前設定でインストール時の手間を省く



[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2020 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/software/rsa_encrypt_decrypt_go_language/