现在的前台加密是JS实现的。我现在想用WINFORM实现同样的功能 也就是加密使用C#实现,得到的密文和JS加密的密文一样
// RSA, a suite of routines for performing RSA public-key computations in
// JavaScript.
// Requires BigInt.js and Barrett.js.
// Copyright 1998-2005 David Shapiro.
// You may use, re-use, abuse, copy, and modify this code to your liking, but
// please keep this header.
// Thanks!
// Dave Shapiro
// dave@ohdave.com
function encrypWithRSA(password) {
setMaxDigits(131);
var key = new RSAKeyPair(
"10001",
"",
"8040d82703de6cf8c77d03364b813bd6936edfec3fac7de247707d1695b84ad035c9e8c144285856b33f52d2cacaa6fc272e726e4cc7fdb83438f183389a3ef79994cc7196121fef6cbdfb2b13ec7efc843acfb935017c771cee01532c68b3e432c28d4f7aaa812f856212a009d09c45d0448acdc4256d6465dfdef7716cb56d");
var encryptedPassword = encryptedString(key, encodeURIComponent( password ) );
return encryptedPassword;
}
encryptionExponent的值:010001
modulus 的值8040d82703de6cf8c77d03364b813bd6936edfec3fac7de247707d1695b84ad035c9e8c144285856b33f52d2cacaa6fc272e726e4cc7fdb83438f183389a3ef79994cc7196121fef6cbdfb2b13ec7efc843acfb935017c771cee01532c68b3e432c28d4f7aaa812f856212a009d09c45d0448acdc4256d6465dfdef7716cb56d
那位大侠帮忙实现吧 或者有这个经验的给按说说
主要你的js是用什么加密算法,你要全贴出来,你这里没有关键代码,根本没有办法分析。
我写了一个小的helper,rsa的,nuget上可以直接安装
https://github.com/xyfy/Helper
这个rsa是可以支持支付宝请求的加解密,签名,验证签名的。
谢谢你了
问题已经解决了
是用C#调用JS解决的
谢谢 DUDU
好像不是答案哦
老大,再看看我的问题呗
@天下吴双: 我们在实际项目中就是用 jsencrypt 加密,用这篇博文中的方法解密的
@dudu:
我是想用C# 加密,得到js一样的加密结果
@天下吴双: 加密算法是什么?秘钥是什么?明文是什么?期望的密文是什么?
参照我的,我是用java,逻辑应该是差不多的。
https://www.cnblogs.com/se7end/p/9522311.html
这是JAVASCRIPT 用
var key = new RSAKeyPair(
"10001",
"",
"8040d82703de6cf8c77d03364b813bd6936edfec3fac7de247707d1695b84ad035c9e8c144285856b33f52d2cacaa6fc272e726e4cc7fdb83438f183389a3ef79994cc7196121fef6cbdfb2b13ec7efc843acfb935017c771cee01532c68b3e432c28d4f7aaa812f856212a009d09c45d0448acdc4256d6465dfdef7716cb56d");
但到 的KEY
如果你不嫌麻烦,你就看看,
因为当时我想自己加密jwt token,结果是对上了的,但不知是否会和js一致。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { public static void Main(string[] args) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); using (StreamWriter sw = new StreamWriter("PublicKey.xml"))//产生公匙 { sw.WriteLine(rsa.ToXmlString(false)); } using (StreamWriter sw = new StreamWriter("PrivateKey.xml"))//产生私匙(也包含私匙) { sw.WriteLine(rsa.ToXmlString(true)); } var re = Encryption("aaa"); var text = ""; MD5 md5 = new MD5CryptoServiceProvider(); byte[] palindata = Encoding.Default.GetBytes(text);//将要加密的字符串转换为字节数组 byte[] encryptdata = md5.ComputeHash(palindata);//将字符串加密后也转换为字符数组 var resultMd5 = Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为加密字符串 var bsStr = UnBase64String("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"); Console.WriteLine(bsStr); var enStr = ToBase64String(bsStr); Console.WriteLine(enStr); var result = MyHmac.CreateToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ", "123"); Console.WriteLine(result); Console.ReadKey(); } //加密 private static string Encryption(string express) { CspParameters param = new CspParameters(); param.KeyContainerName = "oa_erp_dowork";//密匙容器的名称,保持加密解密一致才能解密成功 using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param)) { byte[] plaindata = Encoding.Default.GetBytes(express);//将要加密的字符串转换为字节数组 byte[] encryptdata = rsa.Encrypt(plaindata, false);//将加密后的字节数据转换为新的加密字节数组 return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为字符串 } } //解密 private static string Decrypt(string ciphertext) { CspParameters param = new CspParameters(); param.KeyContainerName = "oa_erp_dowork"; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param)) { byte[] encryptdata = Convert.FromBase64String(ciphertext); byte[] decryptdata = rsa.Decrypt(encryptdata, false); return Encoding.Default.GetString(decryptdata); } } public static string UnBase64String(string value) { if (value == null || value == "") { return ""; } byte[] bytes = Convert.FromBase64String(value); return Encoding.UTF8.GetString(bytes); } public static string ToBase64String(string value) { if (value == null || value == "") { return ""; } byte[] bytes = Encoding.UTF8.GetBytes(value); return Convert.ToBase64String(bytes); } } public class MyHmac { public static string CreateToken(string message, string secret) { secret = secret ?? ""; var encoding = new System.Text.ASCIIEncoding(); byte[] keyByte = encoding.GetBytes(secret); byte[] messageBytes = encoding.GetBytes(message); using (var hmacsha256 = new HMACSHA256(keyByte)) { byte[] hashmessage = hmacsha256.ComputeHash(messageBytes); return Convert.ToBase64String(hashmessage); } } } }
8040d82703de6cf8c77d03364b813bd6936edfec3fac7de247707d1695b84ad035c9e8c144285856b33f52d2cacaa6fc272e726e4cc7fdb83438f183389a3ef79994cc7196121fef6cbdfb2b13ec7efc843acfb935017c771cee01532c68b3e432c28d4f7aaa812f856212a009d09c45d0448acdc4256d6465dfdef7716cb56d
这个是怎么用的呢?
@天下吴双: modulus 是密钥的5个参数的一个,如果js有用其生成密钥的方法,C#也应该有,
具体怎么用我不清楚。
我找过一次C#rsa加密的源码,最后发现donetcore调用的是azure那边实现的,再弄下去就是看算法文档了,好尴尬,没有继续了。
– 找点什么 6年前