首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-12 
C#函数转换成Delphi函数哪位高的能将下面的代码转换成Delphi代码using Systemusing System.IOusing Syst

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了
话说楼上的好甜蜜

热点排行