対称暗号化と復号化のTripleDES - [C#-java]

C#のコードスニペット

MD5暗号化最初に、その後のTripleDES

システムを使用しました。
System.Collections.Genericを使用しました。
System.Linqのを使用しました。
System.Webのを使用して、
System.Textのを使用しました。
System.Security.Cryptographyを使用しました。
System.IOを使用しました。

名前空間WebApplication1と
{
publicクラスのClass1
{

パブリック静的バイト[] CRYPTO_KEY =新しいバイト[] {の0x61、0x75、0x74、0x6F、0x68、0x6F、0x6D、0x65、は0x63、0x6F、0x6F、0x70、0x65、0x72、の0x61、0x74、0x65、0x6F、0x70、 0x65、0x6E、の0x61、0x70、0x69の}。
パブリック静的バイト[] CRYPTO_IV =新しいバイト[] {0x12を、0x34の、0x56、0x78と、(バイト)0x90を、(バイト)0xAB、(バイト)0xCD、(バイト)0xEFという}。


公共の静的な文字列で、Md5(文字列str)
{
IF(string.IsNullOrWhiteSpace(STR))戻りSTR。
StringBuilderのSB =新しいStringBuilderの();
MD5 MD5 =新しいMD5CryptoServiceProvider();
バイト[] S = md5.ComputeHash(Encoding.UTF8.GetBytes(STR))。
md5.Clear();
以下のために(INT iが= 0; I <s.Length; I ++)
{
sb.Append(S [I] .ToString( "X2"));
}
)(sb.ToStringを返します。
}
//对称加密并转BASE64方法1
パブリック静的文字列TripleDesEncrypt(文字列str)
{
SymmetricAlgorithm CSP =新しいTripleDESCryptoServiceProvider()。
csp.Key = CRYPTO_KEY。
csp.IV = CRYPTO_IV。
csp.Padding = PaddingMode.PKCS7。
ICryptoTransform CT = csp.CreateEncryptor()。
バイト[]バッファ= Encoding.UTF8.GetBytes(STR)。
MemoryStreamをミリ秒=新規のMemoryStream()。
CryptoStream CSは新しいCryptoStream(MS、CT、CryptoStreamMode.Write)を=。
cs.Write(バッファ、0、buffer.Length)。
cs.FlushFinalBlock();
cs.Close();
csp.Clear();

リターンConvert.ToBase64String(ms.ToArray());

}

//对称加密、并转base64の方法2
公共の静的な文字列encryptToBase64(文字列平文)
{
試み
{
//のMemoryStreamを作成します。
MemoryStreamをmStream =新しいのMemoryStream();
TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider =新しいTripleDESCryptoServiceProvider();
tripleDESCryptoServiceProvider.Key = CRYPTO_KEY。
tripleDESCryptoServiceProvider.IV = CRYPTO_IV。
tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7; //补位
//tripleDESCryptoServiceProvider.Mode = CipherMode.ECB; // CipherMode.CBC
CryptoStreamはCStream =新しいCryptoStream(mStream、
tripleDESCryptoServiceProvider.CreateEncryptor()、
CryptoStreamMode.Write)。

//バイト配列に渡された文字列を変換します。
バイト[] toEncrypt = Encoding.UTF8.GetBytes(平文)。

//暗号ストリームにバイト配列を書き込み、それをフラッシュします。
cStream.Write(toEncrypt、0、toEncrypt.Length)。
cStream.FlushFinalBlock();

//からバイトの配列を取得
保持している// MemoryStreamを
//暗号化されたデータを。
バイト[] RET = mStream.ToArray()。

//ストリームを閉じます。
cStream.Close();
mStream.Close();

//暗号化されたバッファを返します。
リターンConvert.ToBase64String(RET)。
}
キャッチ(CryptographicException電子)
{
Console.WriteLineをは( "A暗号エラーが発生しました:{0}"、e.Message)。
ヌルを返します。
}
}

}
}

 

Java断片

 

パッケージcom.ittx.edi.erp.service。


輸入sun.misc.BASE64Decoder;
輸入sun.misc.BASE64Encoder;

輸入javax.crypto.Cipher;
輸入javax.crypto.SecretKey。
輸入javax.crypto.SecretKeyFactory;
輸入javax.crypto.spec.DESedeKeySpec;
輸入javax.crypto.spec.IvParameterSpec;
輸入java.security.MessageDigestの;
輸入java.security.spec.AlgorithmParameterSpec;

パブリッククラスTripleDesEncrypt {

//密钥公共参数
プライベート最後のバイト[] = {たdesKeyの0x61、0x75、0x74、0x6F、0x68、0x6F、0x6D、0x65、は0x63、0x6F、0x6F、0x70、0x65、0x72、の0x61、0x74、 0x65、0x6F、0x70、0x65、0x6E、の0x61、0x70、0x69の}。
プライベート最後のバイト[] DESIV = { 0x12を、0x34の、0x56、0x78と、(バイト)0x90を、(バイト)0xAB、(バイト)0xCD、(バイト)0xEFという}; // セットベクター省略

//暗号化キー/値
民間のAlgorithmParameterSpecのIV = NULL;暗号化アルゴリズムの//インタフェースパラメータは、IvParameterSpecは、その達成
の秘密鍵をのSecretKey = NULL;

/ **
* MD5暗号化文字列
。*小文字の16進回転法1つの
* @paramのS
* @return
* /
パブリック文字列MD5(文字列S){
チャーhexdigits [] = { '0'、 '1' 、 '2'、' 3' 、 '4' 、' 5' 、 '6' 、' 7' 、」8' 、 」9' 、 'A'、 'B'、 'C'、 'D'、 'E'、 'F.'};
試み{
//のStringBuilder StringBuilderの新しい新しいSB =();
バイト[] btInput = S.GetBytesメソッド();
//取得するMessageDigestオブジェクトMD5ダイジェストアルゴリズム
MdInst = MessageDigest.getInstanceするMessageDigest( "MD5");
//バイト指定用いて消化更新
mdInst.update(btInputを);
//暗号文取得
バイト[] MD = mdInst.digest();
//変換暗号文進列
INT J = md.length;
チャーSTR []は新しい新しいチャー= J * 2];
int型K = 0;
のための(INT I = 0; I <J; I ++){
バイト0バイト= MD [I];
STR [K ++] = hexdigits [バイト0 >> 4&0xFの。];
STR [K ++] = hexdigits [バイト0&0xFの];
}
新しい新しい文字列を返す(STR).toLowerCase();
}キャッチ(例外E ){
e.printStackTrace();
ヌルを返します。
}
}

/ ** 
* MD5加密转小写16进制方法2
* @param STR
* @paramエンコーディング
* @return
* /
静的な文字列md5ToHex16(文字列str、文字列エンコーディング){
新しいBigIntegerの(1、md5Encrypt(STR、コードします))。 toString(16)
}
静的バイト[] md5Encrypt(文字列str、文字コード){
試み{
するMessageDigest MD5 = MessageDigest.getInstance( "MD5")
md5.reset()
md5.update(str.getBytes(コード))
md5.digest ()
}キャッチ(例外例){
ex.printStackTrace()
NULL
}
}


/ **
* keyパラメータを取得します
*
* @throws例外
* /
パブリックTripleDesEncrypt()例外{スロー
DESedeKeySpec keySpec =新新DESedeKeySpec(たdesKeyを); //設定したキーパラメータ
IV =新しいIvParameterSpec(DESIV); // 設定ベクトル
するSecretKeyFactory KeyFactoryに= SecretKeyFactory.getInstance( "DESEDE") ; // キー植物の取得
キー= keyFactory.generateSecret(keySpecを); //キーオブジェクト得


}

/ **
*暗号化方式
*
* @paramデータ
* @return
* @throws例外
* /
パブリック文字列のエンコード(文字列データ)は、例外{スロー
//取得した暗号化対象暗号、暗号ENCIPHER Cipher.getInstance =(「DESEDE / CBC / PKCS5Padding」)を
enCipher.init(Cipher.ENCRYPT_MODE、キー、IV) ; // 動作モード、暗号化モードを設定し、鍵ベクトルが与えられた
バイト[] = pasByte enCipher.doFinal(data.getBytes( "UTF-8"));
Base64Encoder =新しい新しいBase64Encoder Base64Encoder();
戻りbase64Encoder.encode(pasByte);
}

/ **
*復号方法
*
* @paramデータ
* @return
* @throws例外
* /
パブリック文字列デコード(文字列データ)例外{スロー
暗号DECIPHER暗号= .getInstance( "DESEDE / CBC / PKCS5Padding"変換);
deCipher.init(Cipher.DECRYPT_MODE、キー、IV);
Base64Decoder Base64Decoder新しい新Base64Decoder =();

バイト[] = pasByte deCipher.doFinal(base64Decoder.decodeBuffer(データ));

戻り新しい新しいString(pasByte、 "UTF-8");
}
//パブリック静的メインボイド(文字列[]引数){
//試み{
// =テスト文字列"7c9c9ebdc2a0a323cbc0f4d23605fde7";
//新しい新しいTripleDesEncrypt TripleDesEncrypt DES =(); //カスタムキー
//文字列S = des.MD5( "[ {\" JSON \ ":\" 123 \ "}] _ 20200106_012345678901234567890123" );
//文字列SS = s.toLowerCase();
// System.out.printlnは(SS);
//するSystem.out.println( "暗号化前の文字:" + SS);
// System.out.printlnは( "暗号化された文字:" + des.encode(SS));
//するSystem.out.println( "復号化された文字:"+ Des.decode(des.encode(SS)))。
キャッチ} //(例外E)は{
// e.printStackTrace();
//}
//}

}

ボー要約の別友達を転載:
https://www.cnblogs.com/jaamy/p/6118622.html

おすすめ

転載: www.cnblogs.com/joker331/p/12165889.html