java - AES 加密 C# -> Java
问题描述
我需要将此代码(C#)转换为 Java:
private static string hash(string _param0, byte[] _param1)
{
byte[] bytes = Encoding.UTF8.GetBytes(_param0.ToLowerInvariant());
byte[] inputBuffer = new byte[16];
for (int index = 0; index < bytes.Length; ++index)
inputBuffer[index % 16] ^= bytes[index];
using (Aes aes = Aes.Create())
{
aes.Padding = PaddingMode.None;
aes.Mode = CipherMode.CBC;
using (ICryptoTransform encryptor = aes.CreateEncryptor(_param1, new byte[16]))
{
for (int index = 0; index < 16384; ++index)
inputBuffer = encryptor.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
}
}
byte[] inArray = new byte[8];
Array.Copy((Array)inputBuffer, 0, (Array)inArray, 0, 4);
Array.Copy((Array)inputBuffer, 8, (Array)inArray, 4, 4);
return Convert.ToBase64String(inArray).Replace('+', '-').Replace('/', '_').Replace("=", string.Empty);
}
public static T[] encryptUntil<T>(this T[] _param0, int _param1, int _param2)
{
T[] objArray = new T[_param1];
while (--_param1 >= 0)
{
if (_param0.Length > _param2 + _param1)
objArray[_param1] = _param0[_param2 + _param1];
}
return objArray;
}
private static byte[] encrypt(string _param0)
{
byte[] bytes = Encoding.UTF8.GetBytes(_param0);
byte[] inputBuffer = new byte[16]
{
(byte) 147,
(byte) 196,
(byte) 103,
(byte) 227,
(byte) 125,
(byte) 176,
(byte) 199,
(byte) 164,
(byte) 209,
(byte) 190,
(byte) 63,
(byte) 129,
(byte) 1,
(byte) 82,
(byte) 203,
(byte) 86
};
for (int index = 0; index < 65536; ++index)
{
int num = 0;
while (num < bytes.Length)
{
using (Aes aes = Aes.Create())
{
aes.Padding = PaddingMode.None;
aes.Mode = CipherMode.CBC;
using (ICryptoTransform encryptor = aes.CreateEncryptor(bytes.encryptUntil<byte>(16, num), new byte[16]))
inputBuffer = encryptor.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
}
num += 16;
}
}
return inputBuffer;
}
所以基本上这使用带有 CBC 的 Aes 并且没有填充,并通过使用字节数组作为密钥来加密字符串。我尝试使用 Cipher 和“AES/CBC/NoPadding”,但我似乎无法弄清楚如何准确地做到这一点。如果有人可以帮助我,我将不胜感激!
解决方案
推荐阅读
- xslt - 通过 XSLT 将 XML 转为文本
- java - 串行链接错误和错误路径 jre 1.7.0_15 32-bi
- html - 从 hta 按钮启动 plink-ssh 连接并将值传递给 ssh 命令
- android - 我应该在 onResume() 调用中从数据库中检索记录吗?
- jenkins-pipeline - Jenkins Scripted Pipeline: sshCommand 执行 statusCode
- php - 无法找到我的 iOS 设备 ID 并连接到 APNS 服务器以在 PHP 中进行推送通知
- swift - 如何在 swift (FCM) 中接收数据通知
- javascript - 如何修复“http://localhost:3000”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
- git - 如何在 Colab 上克隆共享的私有 git 存储库?
- compression - 结构化消息压缩