我想base64编码数据把它放在一个URL中,然后在我的HttpHandler中解码它.
我发现Base64编码允许使用'/'字符,这会弄乱我的UriTemplate匹配.然后我发现维基百科有一个"修改过的Base64 for URL"的概念:
存在修改的URL变体Base64,其中不使用填充'=',标准Base64的'+'和'/'字符分别替换为' - '和'_',因此使用URL编码器/解码器不再需要,并且对编码值的长度没有影响,保留相同的编码形式,以便在关系数据库,Web表单和对象标识符中使用.
使用.NET我想修改我当前的代码,从基本的base64编码和解码到使用"修改的base64 for URL"方法.有没有人这样做过?
为了解码,我知道它开头是这样的:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Run Code Online (Sandbox Code Playgroud)
但是,我需要在结尾处添加一个或两个'='字符,这看起来有点复杂.
我的编码逻辑应该更简单一些:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
Run Code Online (Sandbox Code Playgroud)
我已经看到Guid to Base64用于URL StackOverflow条目,但是它具有已知长度,因此它们可以硬编码最后所需的等号数.
我一直在使用JWT库来解码Json Web Token,并希望切换到Microsoft的官方JWT实现System.IdentityModel.Tokens.Jwt.
文档非常稀疏,所以我很难弄清楚如何完成我在JWT库中所做的工作.使用JWT库,有一个Decode方法,它采用base64编码的JWT并将其转换为JSON,然后可以对其进行反序列化.我想使用System.IdentityModel.Tokens.Jwt做类似的事情,但经过大量的挖掘,无法弄清楚如何.
为了它的价值,我正在从cookie中读取JWT令牌,以便与Google的身份框架一起使用.
任何帮助,将不胜感激.
我正在为一个我正在整理的简单网站开发快速验证码生成器,我希望在页面的URL中传递加密密钥.我可能很容易做到这一点作为一个查询字符串参数,但我希望不是这样(只是因为没有其他任何东西跑掉查询字符串)...
我的加密代码生成一个byte [],然后使用Convert.ToBase64String(byte [])将其转换为字符串.但是,这个字符串仍然不是友好的url,因为它可以包含'/'和'='之类的东西.有没有人知道.NET框架中更好的函数将字节数组转换为url友好字符串?
我知道所有关于System.Web.HttpUtility.UrlEncode()及其等价物,但是,它们只适用于查询字符串参数.如果我在路径内部对"="进行url编码,我的Web服务器会返回400 Bad Request错误.
无论如何,不是一个关键问题,但希望有人能给我一个很好的解决方案
**编辑:只是为了绝对确定我正在用字符串做什么,我想我会提供更多信息.
由我的加密算法产生的byte []应该通过某种算法提供,以使其成为url友好字符串.在此之后,它将成为XElement的内容,然后将其用作XSLT转换的源文档,并用作锚点的href属性的一部分.我不相信xslt转换导致问题,因为路径上出现的内容似乎是编码的查询字符串参数,但会导致HTTP 400
我也在base64字符串上尝试过HttpUtility.UrlPathEncode(),但这似乎也没有做到(我仍然在我的网址中以'/'结尾)**
我需要身体中的所有文本来接收电子邮件.
我试过了:
var mesage = GetMessage(service, "me", 1);
Console.WriteLine(mesage.Snippet);
public static Message GetMessage(GmailService service, String userId, String messageId)
{
try
{
return service.Users.Messages.Get(userId, messageId).Execute();
}
catch (Exception e)
{
Console.WriteLine("An error occurred: " + e.Message);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
但我正在获取截图中显示的片段.
我试图消除对System.Web.dllWeb API项目的依赖,但偶然发现了一个调用HttpServerUtility.UrlTokenEncode(byte[] input)(和它相应的解码方法),我不知道要替换什么以确保向后兼容性.文档说这个方法
使用64位数字将字节数组编码为等效的字符串表示,可用于在URL上传输.
我尝试用Convert.ToBase64String(byte[] input)(及其相应的解码方法)代替,这在文档中非常类似地描述:
将一个8位无符号整数数组转换为其等效的字符串表示形式,该表示形式使用base-64数字进行编码.
但是,它们似乎并不完全等同; 当Convert.FromBase64String(string input)用于解码用其编码的字符串时HttpServerUtility,我得到一个异常说明
输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符.
这两个转换实用程序有什么区别?消除这种依赖的正确方法是System.Web.HttpServerUtility什么?
有些用户建议这与此相关,但我不同意.这个问题是关于编码基64字符串的URL安全的方式一般,但我需要重现具体行为的HttpServerUtility,但没有一个依赖System.Web.
我正在根据C#中的RFC4648寻找base64url的(快速)标准实现.
我发现HttpServerUtility.UrlTokenEncode但看起来这并不遵循RFC4648(UrlTokenEncode在末尾添加一个数字,表示=已删除的符号数量;请参阅此处和此处).
例:
base64编码:
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE ="
base64url编码:
HttpServerUtility.UrlTokenEncode(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE1",但我希望"QUE"
我正在尝试解码HelloWorks回调签名以增加端点的安全性.由于它保留在文档中,我需要使用以下openssl命令生成私钥:
openssl genrsa -des3 -out helloworks.pem 4096
Run Code Online (Sandbox Code Playgroud)
然后创建公钥:
openssl rsa -in helloworks.pem -outform PEM -pubout -out public.pem
Run Code Online (Sandbox Code Playgroud)
我创建了两个密钥并对其进行了配置.现在我需要解码base64由他们发送的X-Helloworks-Signature,然后使用私钥解密结果.
我一直在尝试用C#做几种方法,但没有运气.我使用BouncyCastle库完成的一种方法是:
var signature = mvcContext.HttpContext.Request.Headers["X-Helloworks-Signature"];
var url = mvcContext.HttpContext.Request.Path.Value;
var bytesToDecrypt = Convert.FromBase64String(signature);
AsymmetricCipherKeyPair keyPair;
var pemPath = Path.Combine(env.ContentRootPath, "./helloworks.pem");
using (var reader = File.OpenText(pemPath))
keyPair = (AsymmetricCipherKeyPair)new PemReader(reader, new PasswordFinder("password")).ReadObject();
var decryptEngine = new Pkcs1Encoding(new RsaEngine());
decryptEngine.Init(false, keyPair.Private);
var decryptedToken = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));
Run Code Online (Sandbox Code Playgroud)
但它总是抛出相同的异常消息:
Org.BouncyCastle.Crypto.DataLengthException: 'input too large for RSA cipher.'
Run Code Online (Sandbox Code Playgroud)
我一直在尝试我在SO和网络上找到的其他方法,但没有运气.
如何使用私钥pem文件解密C#中的签名,特别是.Net Core 2?
更新1 …
我需要加密和解密字符串值,例如电子邮件地址和数值,但加密的字符串中不应包含'/',因为我在URL中使用它并使用'/'作为分隔符来获取某些值.
我目前正在使用以下方法:
string passPhrase = "Pas5pr@se"; // can be any string
string saltValue = "s@1tValue"; // can be any string
string hashAlgorithm = "SHA1"; // can be "MD5"
int passwordIterations = 2; // can be any number
string initVector = "@1B2c3D4e5F6g7H8"; // must be 16 bytes
int keySize = 256; // can be 192 or 128
public string Encrypt(string plainText)
{
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 …Run Code Online (Sandbox Code Playgroud) 我试图通过代码发送电子邮件,我遇到了障碍.当Base64UrlEncode出现红色时,我正在解决这个问题.我的代码中有相同的using语句.
using System;
using System.IO;
using System.Net.Mail;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MyCompany.Sample.EmailConnector.Model;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
...
public static Message createGmailMessage(AE.Net.Mail.MailMessage mailMessage)
{
var messageString = new StringWriter();
mailMessage.Save(messageString);
Message gmailMessage = new Message();
gmailMessage.Raw = Base64UrlEncode(messageString.ToString());
}
Run Code Online (Sandbox Code Playgroud)
如何启用"Base64UrlEncode"?
c# ×8
base64 ×4
gmail-api ×2
.net ×1
asp.net ×1
bouncycastle ×1
decode ×1
encode ×1
encryption ×1
friendly-url ×1
jwt ×1
pem ×1
system.web ×1
url ×1
url-encoding ×1
urlencode ×1
wif ×1