分享源码
界面截图:
是否带模块:
纯源码
备注说明:
-
昨天要用,没找到现成的轮子,于是自己用c#封装了一个
CurveCrypto.zip
(883.21 KB, 下载次数: 49)
易语言 代码:
窗口程序集名 保 留 保 留 备 注 C25519Lib, , 公开 变量名 类 型 数组 备 注 C25519 对象
C25519.
创建 ( “CurveCryptoNew.Curve25519New” ,
) C25519.
清除 ( ) GenerateCurve25519KeyPair 逻辑型
flag = C25519.
逻辑方法 ( “GenerateCurve25519KeyPair” ,
) 返回 ( flag
) 变量名 类 型 静态 数组 备 注 publicKey 文本型
publicKey = C25519.
文本方法 ( “GetPublicKey” ,
) 返回 ( 到大写 ( publicKey
) )
变量名 类 型 静态 数组 备 注 PrivateKey 文本型
PrivateKey = C25519.
文本方法 ( “GetPrivateKey” ,
) 返回 ( 到大写 ( PrivateKey
) )
CalculateCurve25519SharedSecret 文本型 publicKey 文本型 privateKey 文本型
result = C25519.
文本方法 ( “CalculateCurve25519SharedSecret” , publicKey, privateKey
) 返回 ( 到大写 ( result
) )
窗口程序集名 保 留 保 留 备 注 窗口程序集_启动窗口 变量名 类 型 数组 备 注 C25519 C25519Lib
变量名 类 型 静态 数组 备 注 publicKey 文本型 privateKey 文本型 result 文本型
如果真 ( 取反 ( C25519.
GenerateCurve25519KeyPair ( ) )
) 调试输出 ( “生成密钥对失败” ) 返回 ( ) publicKey = C25519.GetPublicKey ( ) privateKey = C25519.
GetPrivateKey ( ) 调试输出 ( publicKey
) 调试输出 ( privateKey
) result = C25519.
CalculateCurve25519SharedSecret ( publicKey, privateKey
) 调试输出 ( “共享密钥:” +
#换行符 + result
)
c#代码:
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Agreement;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CurveCryptoNew
{
public interface IMyClass
{
string GetPublicKey();
string GetPrivateKey();
string CalculateCurve25519SharedSecret(string publicKey, string privateKey);
bool GenerateCurve25519KeyPair();
}
[ClassInterface(ClassInterfaceType.None)]
public class Curve25519New : IMyClass
{
/// <summary>
/// 密钥交换算法
/// </summary>
/// <param name="publicKey"></param>
/// <param name="privateKey"></param>
/// <returns></returns>
public string CalculateCurve25519SharedSecret(string publicKey, string privateKey)
{
X25519PrivateKeyParameters privateKeyParams = new X25519PrivateKeyParameters(HexToBytes(privateKey), 0);
X25519PublicKeyParameters publicKeyParams = new X25519PublicKeyParameters(HexToBytes(publicKey), 0);
X25519Agreement agreement = new X25519Agreement();
agreement.Init(privateKeyParams);
byte[] sharedSecret = new byte[32];
agreement.CalculateAgreement(publicKeyParams, sharedSecret, 0);
return BytesToHex(sharedSecret);
}
string privateKey;
string publicKey;
public string GetPublicKey()
{
return publicKey;
}
public string GetPrivateKey()
{
return privateKey;
}
/// <summary>
/// 生成GenerateCurve25519算法密钥对
/// </summary>
/// <param name="privateKey"></param>
/// <param name="publicKey"></param>
/// <returns></returns>
///
public bool GenerateCurve25519KeyPair()
{
X25519KeyPairGenerator generator = new X25519KeyPairGenerator();
generator.Init(new X25519KeyGenerationParameters(new SecureRandom()));
AsymmetricCipherKeyPair keyPair = generator.GenerateKeyPair();
X25519PrivateKeyParameters privateKeyParams = (X25519PrivateKeyParameters)keyPair.Private;
X25519PublicKeyParameters publicKeyParams = (X25519PublicKeyParameters)keyPair.Public;
privateKey = BytesToHex(privateKeyParams.GetEncoded());
publicKey = BytesToHex(publicKeyParams.GetEncoded());
return privateKey.Length > 0 && publicKey.Length > 0;
}
public static byte[] HexToBytes(string hex)
{
int length = hex.Length;
byte[] bytes = new byte[length / 2];
for (int i = 0; i < length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
return bytes;
}
public static string BytesToHex(byte[] bytes)
{
StringBuilder hexBuilder = new StringBuilder(bytes.Length * 2);
foreach (byte b in bytes)
{
hexBuilder.AppendFormat("{0:x2}", b);
}
return hexBuilder.ToString();
}
}
}
评分
查看全部评分