C#函数转换成Delphi函数

nbwzw 2010-03-26 11:32:15
哪位高的能将下面的代码转换成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);
}
}
}
...全文
178 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wliaoc 2010-07-16
  • 打赏
  • 举报
回复
看了头晕,jf了
话说楼上的好甜蜜
kye_jufei 2010-07-12
  • 打赏
  • 举报
回复
Delphi加、解密函數:

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;
iamduo 2010-04-02
  • 打赏
  • 举报
回复
肯定是不对的。
但是细节调整一下也可以用。
iamduo 2010-04-02
  • 打赏
  • 举报
回复

// RemObjects CS to Pascal 0.2

namespace MYEncryption;

interface
uses
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;


implementation

class 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 cipherText
end;

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 plainText
end;

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.
nbwzw 2010-03-29
  • 打赏
  • 举报
回复
因为之前有人已经有一部分程序做好了,我也要用他的数据库做接下来的开发,所以这个算法只能用他的,他是用C#写的,哪位高手帮下忙
SQLDebug_Fan 2010-03-26
  • 打赏
  • 举报
回复
网上到处都是,为什么非要用C#的呢?
liangpei2008 2010-03-26
  • 打赏
  • 举报
回复
去网上找一个Delphi版的AES算法,按参数添进去就可以了!
不过记不清AES里面有没有先加密后Base64了
bdmh 2010-03-26
  • 打赏
  • 举报
回复
不就是个加解密的函数吗,delphi的到网上找到处都是
风之谷 2010-03-26
  • 打赏
  • 举报
回复
好麻烦 看的头疼
风之谷 2010-03-26
  • 打赏
  • 举报
回复
好长~

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧