读书人

C#函数转换成Delphi函数解决方案

发布时间: 2012-02-12 17:16:33 作者: rapoo

C#函数转换成Delphi函数
哪位高的能将下面的代码转换成Delphi代码

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

namespace MYEncryption
{
public class Encryption
{
public static string Encrypt(string plainText,
string passPhrase,
string saltValue,
string hashAlgorithm,
int passwordIterations,
string initVector,
int keySize)
{
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);

byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);

PasswordDeriveBytes password = new PasswordDeriveBytes(
passPhrase,
saltValueBytes,
hashAlgorithm,
passwordIterations);

byte[] keyBytes = password.GetBytes(keySize / 8);

RijndaelManaged symmetricKey = new RijndaelManaged();

symmetricKey.Mode = CipherMode.CBC;

ICryptoTransform encryptor = symmetricKey.CreateEncryptor(
keyBytes,
initVectorBytes);

MemoryStream memoryStream = new MemoryStream();

CryptoStream cryptoStream = new CryptoStream(memoryStream,
encryptor,
CryptoStreamMode.Write);
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);

cryptoStream.FlushFinalBlock();

byte[] cipherTextBytes = memoryStream.ToArray();

memoryStream.Close();
cryptoStream.Close();

string cipherText = Convert.ToBase64String(cipherTextBytes);

return cipherText;
}

public static string Decrypt(string cipherText,
string passPhrase,
string saltValue,
string hashAlgorithm,
int passwordIterations,
string initVector,
int keySize)
{
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);

byte[] cipherTextBytes = Convert.FromBase64String(cipherText);

PasswordDeriveBytes password = new PasswordDeriveBytes(
passPhrase,
saltValueBytes,
hashAlgorithm,
passwordIterations);

byte[] keyBytes = password.GetBytes(keySize / 8);

RijndaelManaged symmetricKey = new RijndaelManaged();

symmetricKey.Mode = CipherMode.CBC;

ICryptoTransform decryptor = symmetricKey.CreateDecryptor(
keyBytes,
initVectorBytes);

MemoryStream memoryStream = new MemoryStream(cipherTextBytes);

CryptoStream cryptoStream = new CryptoStream(memoryStream,
decryptor,
CryptoStreamMode.Read);

byte[] plainTextBytes = new byte[cipherTextBytes.Length];

int decryptedByteCount = cryptoStream.Read(plainTextBytes,
0,
plainTextBytes.Length);

memoryStream.Close();
cryptoStream.Close();



string plainText = Encoding.UTF8.GetString(plainTextBytes,
0,
decryptedByteCount);

return plainText;
}

public static string Encrypt(string plainText, string passPhrase)
{
string saltValue = "s@1tYADDNS"; // can be any string
string hashAlgorithm = "SHA1"; // can be "MD5"
int passwordIterations = 2; // can be any number
string initVector = "@1Y2A3D4D5N6S7F8"; // must be 16 bytes
int keySize = 256; // can be 192 or 128

return Encrypt(plainText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize);
}

public static string Decrypt(string cipherText, string passPhrase)
{
string saltValue = "s@1tYADDNS"; // can be any string
string hashAlgorithm = "SHA1"; // can be "MD5"
int passwordIterations = 2; // can be any number
string initVector = "@1Y2A3D4D5N6S7F8"; // must be 16 bytes
int keySize = 256; // can be 192 or 128

return Decrypt(cipherText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize);
}
}
}


[解决办法]
好长~
[解决办法]
好麻烦 看的头疼
[解决办法]
不就是个加解密的函数吗,delphi的到网上找到处都是
[解决办法]
去网上找一个Delphi版的AES算法,按参数添进去就可以了!
不过记不清AES里面有没有先加密后Base64了
[解决办法]
网上到处都是,为什么非要用C#的呢?
[解决办法]

Delphi(Pascal) code
// RemObjects CS to Pascal 0.2namespace MYEncryption;interfaceuses  System,  System.IO,  System.Text,  System.Security.Cryptography;type  Encryption = public class  public    class method Encrypt(plainText: String; passPhrase: String; saltValue: String; hashAlgorithm: String; passwordIterations: Integer; initVector: String; keySize: Integer): String;    class method Decrypt(cipherText: String; passPhrase: String; saltValue: String; hashAlgorithm: String; passwordIterations: Integer; initVector: String; keySize: Integer): String;    class method Encrypt(plainText: String; passPhrase: String): String;    // can be any string    // can be "MD5"    // can be any number    // must be 16 bytes    // can be 192 or 128        class method Decrypt(cipherText: String; passPhrase: String): String;  end;implementationclass method Encryption.Encrypt(plainText: String; passPhrase: String; saltValue: String; hashAlgorithm: String; passwordIterations: Integer; initVector: String; keySize: Integer): String;begin  var initVectorBytes: array of Byte := Encoding.ASCII.GetBytes(initVector);  var saltValueBytes: array of Byte := Encoding.ASCII.GetBytes(saltValue);  var plainTextBytes: array of Byte := Encoding.UTF8.GetBytes(plainText);  var password: PasswordDeriveBytes := new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);  var keyBytes: array of Byte := password.GetBytes(keySize / 8);  var symmetricKey: RijndaelManaged := new RijndaelManaged();  symmetricKey.Mode := CipherMode.CBC;  var encryptor: ICryptoTransform := symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);  var memoryStream: MemoryStream := new MemoryStream();  var cryptoStream: CryptoStream := new CryptoStream(memoryStream, encryptor, CryptoStreamMode.&Write);  cryptoStream.&Write(plainTextBytes, 0, plainTextBytes.Length);  cryptoStream.FlushFinalBlock();  var cipherTextBytes: array of Byte := memoryStream.ToArray();  memoryStream.Close();  cryptoStream.Close();  var cipherText: String := Convert.ToBase64String(cipherTextBytes);  exit cipherTextend;class method Encryption.Decrypt(cipherText: String; passPhrase: String; saltValue: String; hashAlgorithm: String; passwordIterations: Integer; initVector: String; keySize: Integer): String;begin  var initVectorBytes: array of Byte := Encoding.ASCII.GetBytes(initVector);  var saltValueBytes: array of Byte := Encoding.ASCII.GetBytes(saltValue);  var cipherTextBytes: array of Byte := Convert.FromBase64String(cipherText);  var password: PasswordDeriveBytes := new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);  var keyBytes: array of Byte := password.GetBytes(keySize / 8);  var symmetricKey: RijndaelManaged := new RijndaelManaged();  symmetricKey.Mode := CipherMode.CBC;  var decryptor: ICryptoTransform := symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);  var memoryStream: MemoryStream := new MemoryStream(cipherTextBytes);  var cryptoStream: CryptoStream := new CryptoStream(memoryStream, decryptor, CryptoStreamMode.&Read);  var plainTextBytes: array of Byte := new Byte[cipherTextBytes.Length];  var decryptedByteCount: Integer := cryptoStream.&Read(plainTextBytes, 0, plainTextBytes.Length);  memoryStream.Close();  cryptoStream.Close();  var plainText: String := Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);  exit plainTextend;class method Encryption.Encrypt(plainText: String; passPhrase: String): String;begin  var saltValue: String := 's@1tYADDNS';  var hashAlgorithm: String := 'SHA1';  var passwordIterations: Integer := 2;  var initVector: String := '@1Y2A3D4D5N6S7F8';  var keySize: Integer := 256;  exit Encrypt(plainText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize)end;class method Encryption.Decrypt(cipherText: String; passPhrase: String): String;begin  var saltValue: String := 's@1tYADDNS';  var hashAlgorithm: String := 'SHA1';  var passwordIterations: Integer := 2;  var initVector: String := '@1Y2A3D4D5N6S7F8';  var keySize: Integer := 256;  exit Decrypt(cipherText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize)end;end. 


[解决办法]
肯定是不对的。
但是细节调整一下也可以用。
[解决办法]
Delphi加、解密函:

Delphi(Pascal) code
function Enc(Str:String):String;var i,j:Integer;begin Result:=''; j:=0; for i:=1 to Length(Str) do   begin     Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);     j:=(j+1) mod 8;   end;end;function Dec(Str:String):String;var i,j:Integer;begin Result:=''; j:=0; for i:=1 to Length(Str) div 2 do   begin     Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]);     j:=(j+1) mod 8;   end;end;
[解决办法]
看了头晕,jf了
话说楼上的好甜蜜

读书人网 >.NET

热点推荐