2017-06-02 47 views
0

我有這樣的代碼在C#轉換C#TripleDes的PKCS7代碼PHP代碼

var dataBytes = Encoding.UTF8.GetBytes('clear text'); 

var symmetric = SymmetricAlgorithm.Create("TripleDes"); 
symmetric.Mode = CipherMode.ECB; 
symmetric.Padding = PaddingMode.PKCS7; 

var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String('myKey'), new byte[8]); 

var signedData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length)); 

現在我需要的C#代碼轉換爲PHP代碼。 方面

+0

最好不要使用3DES,它是過時的,不是很安全,而不是使用AES。不要使用ECB模式,它不安全,請參閱[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滾動到企鵝。 取而代之的是將CBC模式與隨機IV一起使用,只是將加密數據與IV一起用於解密,並不需要保密。 – zaph

回答

-1

我使用這個功能,併爲我工作

function encryptData($plainText,$key) 
{ 

    $byte = mb_convert_encoding($key, 'ASCII'); 

    $desKey = base64_decode($key); 
    $data = mb_convert_encoding($plainText, 'ASCII'); 

    // add PKCS#7 padding 
    $blocksize = mcrypt_get_block_size('tripledes', 'ecb'); 
    $paddingSize = $blocksize - (strlen($data) % $blocksize); 
    $data .= str_repeat(chr($paddingSize), $paddingSize); 

    // encrypt password 
    $encData = mcrypt_encrypt('tripledes', $desKey, $data, 'ecb'); 

    return base64_encode($encData); 
} 
+0

沒有理由相信'$ key'或'$ plainText'可以轉換爲'ASCII'。更好的編碼是'utf8'。 – zaph