Perl (PHP aynı zamanda bir kod parçacığı) yazılmış olan bazı şifreleme kodu var - ama sadece üçüncü parti ile çalışmak için VB.NET ile yazılmış bir sürümü alınamıyor.
Example in Perl
package Sitemaker::API::Crypt;
use warnings;
use strict;
use base qw( Exporter );
use Crypt::CBC;
use MIME::Base64;
our @EXPORT = qw(
encrypt
decrypt
);
=head2 encrypt( $key, $iv, $arg1[,$arg2][,...] )
This encrypts the argumenst (which must all be values, not references) with
the key (which must be 16 characters long)
=cut
sub encrypt {
my ( $key, $iv, @args ) = @_;
my $args = join( '|', @args );
my $cipher = Crypt::CBC->new(
-cipher => 'Rijndael',
-blocksize => 16,
-keysize => 16,
-header => 'none',
-padding => 'standard',
-iv => $iv,
-literal_key => 1,
-key => $key,
);
my $binary_token = $cipher->encrypt( $args );
return encode_base64( $iv . $binary_token );
}
1;
Example in PHP
/**
* @param string $plaintext
* @return string encrypted token
*
* Relies on the Mcrypt module
*/
function encrypt( $plaintext, $apiKey)
{
// Initialize mcrypt module (AES, 128-bit key, CBC)
$handle = mcrypt_module_open( MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv( mcrypt_enc_get_iv_size( $handle ), MCRYPT_DEV_URANDOM );
// PKCS#5 padding
$blocksize = mcrypt_enc_get_block_size( $handle );
$padsize = $blocksize - ( strlen( $plaintext ) % $blocksize );
$plaintext .= str_repeat( chr( $padsize ), $padsize );
// encrypt
mcrypt_generic_init( $handle, $apiKey, $iv );
$ciphertext = mcrypt_generic( $handle, $plaintext );
// clean up
mcrypt_generic_deinit( $handle );
mcrypt_module_close( $handle );
return base64_encode( $iv. $ciphertext );
}
Yani VB.NET de aynı yeniden çalıştı, ama ben servise göndermek gibi, işe yarıyor ve sadece hataları geri alamadım. VB.NET ile şifreleme yöntemi ...
Public Function EncrpytIt(ByVal Key As String, ByVal IV As String, ByVal arrParams As String()) As String
Dim plainTextBytes As Byte()
plainTextBytes = Encoding.ASCII.GetBytes(Join(arrParams, "~"))
Dim outputBytes As Byte()
Dim symmetricKey As New System.Security.Cryptography.RijndaelManaged()
With symmetricKey
.Key = Encoding.ASCII.GetBytes(Key)
.IV = Encoding.ASCII.GetBytes(IV)
.Mode = CipherMode.CBC
.BlockSize = 128
.KeySize = 128
.Padding = PaddingMode.PKCS7
End With
Dim encryptor As ICryptoTransform = symmetricKey.CreateEncryptor(symmetricKey.Key, symmetricKey.IV)
Using msEncrypt As New MemoryStream()
Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
csEncrypt.Write(plainTextBytes, 0, plainTextBytes.Length)
csEncrypt.FlushFinalBlock()
End Using
outputBytes = msEncrypt.ToArray
End Using
Return IV & Convert.ToBase64String(outputBytes)
End Function
Aynı şekilde davranmak, ya da ben vb.net kod ayarlarını değiştirmek zorunda mı?