-
-
/** - 암호화 복호화
- */
- class STD3Des
- {
- 비공개 $key = "";
- 비공개 $iv = "";
/**
- * 구성, 두 개의 base64_encoded KEY 및 IV 전달
- *
- * @param string $key
- * @param string $iv
- */
- 함수 __construct($key, $iv)
- {
- if (empty($key) ||empty($iv)) {
- echo '키와 iv가 유효하지 않습니다.';
- exit();
- }
- $this ->key = $key;
- $this->iv = $iv;
- }
/**
- *加密
- * @param $value
- * @return
- */
- 공개 함수 암호화($value)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
- $iv = base64_decode($this->iv);
- $value = $this->PaddingPKCS7($value);
- $key = base64_decode($this->key);
- mcrypt_generic_init($td, $key, $iv);
- $ret = base64_encode( mcrypt_generic($td, $value));
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return $ret;
- }
- *解密
- * @param $value
- * @return
- */
- 공용 함수 해독($value)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
- $iv = base64_decode( $this->iv);
- $key = base64_decode($this->key);
- mcrypt_generic_init($td, $key, $iv);
- $ret = Trim(mdecrypt_generic($ td, base64_decode($value)));
- $ret = $this->UnPaddingPKCS7($ret);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return $ ret;
- }
비공개 함수 PaddingPKCS7 ($data)
- {
- $block_size = mcrypt_get_block_size('tripledes', 'cbc');
- $ padding_char = $block_size - (strlen($data) % $block_size);
- $data .= str_repeat(chr($padding_char), $padding_char);
- return $data;
- }
비공개 함수 UnPaddingPKCS7($text)
- {
- $pad = ord($text{strlen($text) - 1});
- if ($pad > strlen($text)) {
- false 반환;
- }
- if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
- return false;
- }
- return substr($text, 0, - 1 * $pad);
- }
- }
//使용
- include('STD3Des.class.php');
- $key='abcdefgh';
- $iv='abcdefgh';
- $msg='테스트 문자열';
- $des= new STD3Des(base64_encode($key),base64_encode($iv));
- $rs1=$des->encrypt($msg);
- echo $rs1.'
';
- $rs2=$des->decrypt($rs1);
- echo $rs2;
-
复system代码
2、.net版本
-
-
//des 加密 解密
- 봉인된 공개 클래스 CryptoHelper
- {
- /// /// 지정된 입력을 암호화합니다.
- ///
- /// 입력입니다.
- /// key
- /// iv
- /// < ;/returns>
- public static string EncryptDes(string input, byte[] key, byte[] iv)
- {
- if (input == null || input.Length == 0)
- return String.Empty;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- MemoryStream ms = null;
- CryptoStream encStream = null;
- StreamWriter sw = null;
- 문자열 결과 = String.Empty;
try
- {
- ms = new MemoryStream();
// 메모리 스트림과
- // CSP DES 키를 사용하여 CryptoStream을 생성합니다.
- //des.Mode = CipherMode.CBC;
- //des.Padding = PaddingMode.PKCS7;
- encStream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);
// StreamWriter를 생성하여
- // 스트림에 문자열을 씁니다.
- sw = new StreamWriter(encStream);
// 일반 텍스트를 스트림에 씁니다.
- sw.Write(input);
- < p>sw.Flush();
- encStream.FlushFinalBlock();
- ms.Flush();
result = Convert.ToBase64String(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length, CultureInfo.InvariantCulture));
- }
- 마지막으로
- {
- //객체를 닫습니다
- if (sw != null)
- sw. Close();
- if (encStream != null)
- encStream.Close();
- if (ms != null)
- ms.Close();
- }
// 암호화된 문자열을 반환합니다
- 결과 반환;
- }
- ///
- /// 지정된 입력을 해독합니다.
- // /
- /// 입력.
- /// key
- /// iv
- ///
- 공개 정적 문자열 DecryptDes(문자열 입력, 바이트[ ] 키, 바이트[] iv)
- {
- byte[] buffer;
- try { buffer = Convert.FromBase64String(input); }
- catch(System.ArgumentNullException) { return String.Empty; }
- // 길이가 0이거나 4의 배수가 아닙니다(다른 경우도 있음)
- catch(System.FormatException) { return String.Empty; }
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- MemoryStream ms = null;
- CryptoStream encStream = null;
- StreamReader sr = null;
- 문자열 결과 = String.Empty;
try
- {
- ms = new MemoryStream(buffer);
// CryptoStream 생성 메모리 스트림과
- // CSP DES 키를 사용합니다.
- encStream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);
- sr = new StreamReader(encStream);
// 스트림을 문자열로 읽습니다.
- result = sr. ReadToEnd();
- }
- 마침내
- {
- //객체 닫기
- if (sr != null)
- sr.Close();
- if (encStream != null)
- encStream.Close();
- if (ms != null)
- ms.Close();
- }
결과 반환;
- }
- }
//调사용
- string key = "abcdefgh";
- string iv = "abcdefgh";
- string msg="test string";
- string rs1 = CryptoHelper.EncryptDes(msg, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
- string rs2 = CryptoHelper. DecryptDes(rs1, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
-
复代码
看完以上两段代码,不知道你有收获没有?个人比较喜欢php版的des加密与解密방법,简洁清晰。
脚本school堂(bbs.it-home.org),专心为您。
|