>  기사  >  백엔드 개발  >  des 암호화 및 복호화 구현 방법 정보(php net 두 버전)

des 암호화 및 복호화 구현 방법 정보(php net 두 버전)

WBOY
WBOY원래의
2016-07-25 09:04:251275검색
  1. /**

  2. 암호화 복호화
  3. */
  4. class STD3Des
  5. {
  6. 비공개 $key = "";
  7. 비공개 $iv = "";

  8. /**

  9. * 구성, 두 개의 base64_encoded KEY 및 IV 전달
  10. *
  11. * @param string $key
  12. * @param string $iv
  13. */
  14. 함수 __construct($key, $iv)
  15. {
  16. if (empty($key) ||empty($iv)) {
  17. echo '키와 iv가 유효하지 않습니다.';
  18. exit();
  19. }
  20. $this ->key = $key;
  21. $this->iv = $iv;
  22. }

  23. /**

  24. *加密
  25. * @param $value
  26. * @return
  27. */
  28. 공개 함수 암호화($value)
  29. {
  30. $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
  31. $iv = base64_decode($this->iv);
  32. $value = $this->PaddingPKCS7($value);
  33. $key = base64_decode($this->key);
  34. mcrypt_generic_init($td, $key, $iv);
  35. $ret = base64_encode( mcrypt_generic($td, $value));
  36. mcrypt_generic_deinit($td);
  37. mcrypt_module_close($td);
  38. return $ret;
  39. }

  40. *解密
  41. * @param $value
  42. * @return
  43. */
  44. 공용 함수 해독($value)
  45. {
  46. $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
  47. $iv = base64_decode( $this->iv);
  48. $key = base64_decode($this->key);
  49. mcrypt_generic_init($td, $key, $iv);
  50. $ret = Trim(mdecrypt_generic($ td, base64_decode($value)));
  51. $ret = $this->UnPaddingPKCS7($ret);
  52. mcrypt_generic_deinit($td);
  53. mcrypt_module_close($td);
  54. return $ ret;
  55. }

  56. 비공개 함수 PaddingPKCS7 ($data)

  57. {
  58. $block_size = mcrypt_get_block_size('tripledes', 'cbc');
  59. $ padding_char = $block_size - (strlen($data) % $block_size);
  60. $data .= str_repeat(chr($padding_char), $padding_char);
  61. return $data;
  62. }
  63. 비공개 함수 UnPaddingPKCS7($text)

  64. {
  65. $pad = ord($text{strlen($text) - 1});
  66. if ($pad > strlen($text)) {
  67. false 반환;
  68. }
  69. if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
  70. return false;
  71. }
  72. return substr($text, 0, - 1 * $pad);
  73. }
  74. }

  75. //使용

  76. include('STD3Des.class.php');
  77. $key='abcdefgh';
  78. $iv='abcdefgh';
  79. $msg='테스트 문자열';
  80. $des= new STD3Des(base64_encode($key),base64_encode($iv));
  81. $rs1=$des->encrypt($msg);
  82. echo $rs1.'
    ';
  83. $rs2=$des->decrypt($rs1);
  84. echo $rs2;

复system代码

2、.net版本

  1. //des 加密 解密

  2. 봉인된 공개 클래스 CryptoHelper
  3. {
  4. /// /// 지정된 입력을 암호화합니다.
  5. ///
  6. /// 입력입니다.
  7. /// key
  8. /// iv
  9. /// < ;/returns>
  10. public static string EncryptDes(string input, byte[] key, byte[] iv)
  11. {
  12. if (input == null || input.Length == 0)
  13. return String.Empty;

  14. DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  15. MemoryStream ms = null;
  16. CryptoStream encStream = null;
  17. StreamWriter sw = null;
  18. 문자열 결과 = String.Empty;

  19. try

  20. {
  21. ms = new MemoryStream();

  22. // 메모리 스트림과

  23. // CSP DES 키를 사용하여 CryptoStream을 생성합니다.
  24. //des.Mode = CipherMode.CBC;
  25. //des.Padding = PaddingMode.PKCS7;
  26. encStream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);

  27. // StreamWriter를 생성하여

  28. // 스트림에 문자열을 씁니다.
  29. sw = new StreamWriter(encStream);

  30. // 일반 텍스트를 스트림에 씁니다.

  31. sw.Write(input);

  32. < p>sw.Flush();
  33. encStream.FlushFinalBlock();
  34. ms.Flush();

  35. result = Convert.ToBase64String(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length, CultureInfo.InvariantCulture));

  36. }
  37. 마지막으로
  38. {
  39. //객체를 닫습니다
  40. if (sw != null)
  41. sw. Close();
  42. if (encStream != null)
  43. encStream.Close();
  44. if (ms != null)
  45. ms.Close();
  46. }
  47. // 암호화된 문자열을 반환합니다

  48. 결과 반환;
  49. }
  50. ///
  51. /// 지정된 입력을 해독합니다.
  52. // /
  53. /// 입력.
  54. /// key
  55. /// iv
  56. ///
  57. 공개 정적 문자열 DecryptDes(문자열 입력, 바이트[ ] 키, 바이트[] iv)
  58. {
  59. byte[] buffer;
  60. try { buffer = Convert.FromBase64String(input); }
  61. catch(System.ArgumentNullException) { return String.Empty; }
  62. // 길이가 0이거나 4의 배수가 아닙니다(다른 경우도 있음)
  63. catch(System.FormatException) { return String.Empty; }

  64. DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  65. MemoryStream ms = null;
  66. CryptoStream encStream = null;
  67. StreamReader sr = null;
  68. 문자열 결과 = String.Empty;

  69. try

  70. {
  71. ms = new MemoryStream(buffer);

  72. // CryptoStream 생성 메모리 스트림과

  73. // CSP DES 키를 사용합니다.
  74. encStream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);

  75. sr = new StreamReader(encStream);

  76. // 스트림을 문자열로 읽습니다.

  77. result = sr. ReadToEnd();
  78. }
  79. 마침내
  80. {
  81. //객체 닫기
  82. if (sr != null)
  83. sr.Close();
  84. if (encStream != null)
  85. encStream.Close();
  86. if (ms != null)
  87. ms.Close();
  88. }

  89. 결과 반환;

  90. }
  91. }

  92. //调사용

  93. string key = "abcdefgh";
  94. string iv = "abcdefgh";
  95. string msg="test string";
  96. string rs1 = CryptoHelper.EncryptDes(msg, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
  97. string rs2 = CryptoHelper. DecryptDes(rs1, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));

复代码

看完以上两段代码,不知道你有收获没有?个人比较喜欢php版的des加密与解密방법,简洁清晰。 脚本school堂(bbs.it-home.org),专心为您。



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.