彼は私のアプリケーションで暗号化アルゴリズムを実装する方法を調査していました。彼はRC2を見た。RC2 Crypt SQL ServerとC#
一方、私はC#から暗号化と復号化を行うことができました。
一方、私はSQL Serverから暗号化と復号化もできました。
しかし、SQL Serverから暗号化されたものは、C#から暗号化できません。また、C#から暗号化してもSQL Serverから解読できません。
もちろん、暗号化キーと初期ベクトルは同じです。
私は、データ暗号化がバイナリ暗号化ではなく何かを追加するものとしてSQLサーバを維持すると思います。
編集: C#コード:私が使用して暗号化するために
public static byte[] Cifrar(string dato, string clave, string vectorInicial)
{
byte[] plainText = Encoding.ASCII.GetBytes(dato);
byte[] keys = Encoding.ASCII.GetBytes(clave);
byte[] vecI = Encoding.ASCII.GetBytes(vectorInicial);
MemoryStream memdata = new MemoryStream();
RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
ICryptoTransform transform;
rc2.Mode = CipherMode.CBC;
transform = rc2.CreateEncryptor(keys, vecI);
CryptoStream encStream = new CryptoStream(memdata,transform,CryptoStreamMode.Write);
encStream.Write(plainText, 0, plainText.Length);
encStream.Close();
return memdata.ToArray();
}
public static string Descrifrar(byte[] dato,string clave, string vectorInicial)
{
byte[] keys = Encoding.ASCII.GetBytes(clave);
byte[] vecI = Encoding.ASCII.GetBytes(vectorInicial);
MemoryStream memdata = new MemoryStream();
RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
ICryptoTransform transform;
rc2.Mode = CipherMode.CBC;
transform = rc2.CreateDecryptor(keys, vecI);
CryptoStream encStream = new CryptoStream(memdata,transform,CryptoStreamMode.Write);
encStream.Write(dato, 0, dato.Length);
encStream.Close();
return Encoding.ASCII.GetString(memdata.ToArray());
}
:
CifradoRC2.Cifrar("Perico", "sdsdfdsf323", "huihuihuih123");
T-SQLコード:
CREATE SYMMETRIC KEY NuevaClaveDeCifrado WITH IDENTITY_VALUE = 'huihuihuih123',ALGORITHM = RC2,KEY_SOURCE = 'sdsdfdsf323' ENCRYPTION BY Password = 'dsjdkflJ435907NnmM#sX003';
CREATE PROCEDURE OpenSqlKeys
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
OPEN SYMMETRIC KEY NuevaClaveDeCifrado DECRYPTION BY PASSWORD ='dsjdkflJ435907NnmM#sX003';
END TRY
BEGIN CATCH
-- Handle non-existant key here
END CATCH
END
GO
CREATE FUNCTION Encrypt(@ValueToEncrypt varchar(max))
RETURNS varbinary(256)
AS
BEGIN
-- Declare the return variable here
DECLARE @Result varbinary(256)
SET @Result = EncryptByKey(Key_GUID('NuevaClaveDeCifrado'), @ValueToEncrypt)
-- Return the result of the function
RETURN @Result
END
GO
CREATE FUNCTION Decrypt(@ValueToDecrypt varbinary(256))
RETURNS varchar(max)
AS
BEGIN
-- Declare the return variable here
DECLARE @Result varchar(max)
SET @Result = DecryptByKey(@ValueToDecrypt)
-- Return the result of the function
RETURN @Result
END
暗号化のバイナリ結果」ペリコ " T-SQL: 0x009C6828879054489426381EFD2E3FD501000000266B3AF2ED7029C1F567AF8119C5D458FCDE1E984B2262A0
C#:
0x9FC66B77905837F5
ありがとう!
「rc2」とは何ですか?何のRC2? –
C#とSQLの両方のコードを共有できます –
ここで残りの質問を共有する予定ですか? – Steve