PHP和.NET关于3DES加密兼容问题
下面是我的C#加解密代码: classDES { //密钥 privateconststringsKey="nuhyrn83Y9LNeygnpq7AMN0aeRQN7kuv"; //矢量,矢量可以为空 privateconststringsIV="qciO6X+aPLw="; ///summary ///加密 ////summary ///paramname="Value"明文/param ///returns密文ba
下面是我的C#加解密代码:
class DES
{
//密钥
private const string sKey = "nuhyrn83Y9LNeygnpq7AMN0aeRQN7kuv";
//矢量,矢量可以为空
private const string sIV = "qciO6X+aPLw=";
///
/// 加密
///
/// 明文
///
public static string EncryptString(string Value)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
Console.WriteLine("Key:" + mCSP.Key.ToString() + ",IV:" + mCSP.IV.ToString());
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
///
/// 解密
///
/// base64转码密文
///
public static string DecryptString(string Value)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
下面是我的PHP加解密代码:
class DesCrypt {
/**
* 使用3DES加密源数据
* @param string $oriSource 源数据
* @param string $key 密钥
* @param string $defaultIV 加解密向量
* @return string $result 密文
*/
public function encryptByTDES($oriSource, $key, $defaultIV) {
$key = base64_decode ( $key ); //结果为24位
$iv = base64_decode ( $defaultIV ); //结果为8位
$oriSource = $this->addPKCS7Padding ( $oriSource );
$td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );
mcrypt_generic_init ( $td, $key, $iv );
$result = mcrypt_generic ( $td, $oriSource );
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
$result = base64_encode ( $result );
return $result;
}
/**
* 使用3DES解密密文
* @param string $encryptedData 密文
* @param string $key 密钥
* @param string $defaultIV 加解密向量
* @return string $result 解密后的原文
*/
public function decryptByTDES($encryptedData, $key, $defaultIV) {
$key = base64_decode ( $key ); //结果为24位
$iv = base64_decode ( $defaultIV ); //结果为8位
$encryptedData = base64_decode ( $encryptedData );
$td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );
mcrypt_generic_init ( $td, $key, $iv );
$result = mdecrypt_generic ( $td, $encryptedData );
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
$result = $this->stripPKSC7Padding ( $result );
return $result;
}
/**
* 为字符串添加PKCS7 Padding
* @param string $source 源字符串
*/
private function addPKCS7Padding($source) {
$block = mcrypt_get_block_size ( 'tripledes', 'cbc' );
$pad = $block - (strlen ( $source ) % $block);
if ($pad
$char = chr ( $pad );
$source .= str_repeat ( $char, $pad );
}
return $source;
}
/**
* 去除字符串末尾的PKCS7 Padding
* @param string $source 带有padding字符的字符串
*/
public function stripPKSC7Padding($source) {
$block = mcrypt_get_block_size ( 'tripledes', 'cbc' );
$char = substr ( $source, - 1, 1 );
$num = ord ( $char );
if ($num > 8) {
return $source;
}
$len = strlen ( $source );
for($i = $len - 1; $i >= $len - $num; $i --) {
if (ord ( substr ( $source, $i, 1 ) ) != $num) {
return $source;
}
}
$source = substr ( $source, 0, - $num );
return $source;
}
}
这两部分代码的加密结果不同,无法兼容,请问是什么问题啊?

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

다음 리소스에는 CakePHP에 대한 추가 정보가 포함되어 있습니다. 이에 대한 더 깊은 지식을 얻으려면 이를 활용하십시오.

Gate.io는 사용자가 설치 패키지를 다운로드하여 장치에 설치하여 사용할 수있는 인기있는 cryptocurrency 교환입니다. 설치 패키지를 얻는 단계는 다음과 같습니다. Gate.io의 공식 웹 사이트를 방문하고 "다운로드"를 클릭하고 해당 운영 체제 (Windows, Mac 또는 Linux)를 선택하고 컴퓨터에 설치 패키지를 다운로드하십시오. 설치 중에 항 바이러스 소프트웨어 또는 방화벽을 일시적으로 비활성화하여 원활한 설치를 보장하는 것이 좋습니다. 완료 후 사용자는 GATE.IO 계정을 만들려면 사용을 시작해야합니다.
