尝试将HashPassword c#(Microsoft示例)转换为javascript
我想将c#中的byte.Parse转换为javascript。。但我不知道怎么做尝试将HashPassword c#(Microsoft示例)转换为javascript,javascript,parsing,byte,Javascript,Parsing,Byte,我想将c#中的byte.Parse转换为javascript。。但我不知道怎么做 byte[] binarySaltValue = new byte[SaltValueSize]; binarySaltValue[0] = byte.Parse(saltValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat); 我需要得到子字符串
byte[] binarySaltValue = new byte[SaltValueSize];
binarySaltValue[0] = byte.Parse(saltValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat);
我需要得到子字符串(0,2)的ascII码。。。我说得对吗
编辑问题
我真正想做的是将Microsoft的HashPassword方法转换成Javascript
private static string HashPassword(string clearData, string saltValue, HashAlgorithm hash)
{
UnicodeEncoding encoding = new UnicodeEncoding();
if (clearData != null && hash != null && encoding != null)
{
// If the salt string is null or the length is invalid then
// create a new valid salt value.
// Convert the salt string and the password string to a single
// array of bytes. Note that the password string is Unicode and
// therefore may or may not have a zero in every other byte.
byte[] binarySaltValue = new byte[SaltValueSize];
binarySaltValue[0] = byte.Parse(saltValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat);
binarySaltValue[1] = byte.Parse(saltValue.Substring(2, 2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat);
binarySaltValue[2] = byte.Parse(saltValue.Substring(4, 2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat);
binarySaltValue[3] = byte.Parse(saltValue.Substring(6, 2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat);
byte[] valueToHash = new byte[SaltValueSize + encoding.GetByteCount(clearData)];
byte[] binaryPassword = encoding.GetBytes(clearData);
// Copy the salt value and the password to the hash buffer.
binarySaltValue.CopyTo(valueToHash, 0);
binaryPassword.CopyTo(valueToHash, SaltValueSize);
byte[] hashValue = hash.ComputeHash(valueToHash);
// The hashed password is the salt plus the hash value (as a string).
string hashedPassword = saltValue;
foreach (byte hexdigit in hashValue)
{
hashedPassword += hexdigit.ToString("X2", CultureInfo.InvariantCulture.NumberFormat);
}
// Return the hashed password as a string.
return hashedPassword;
}
return null;
}
好的,这就是我的解决方案,也许它没有优化,但运行良好
function Salt(plainText, salt) {
if (plainText != undefined && plainText != "" && salt != null) {
// If the salt string is null or the length is invalid then
// create a new valid salt value.
// Convert the salt string and the password string to a single
// array of bytes. Note that the password string is Unicode and
// therefore may or may not have a zero in every other byte.
var binarySaltValue = new Array();
binarySaltValue[0] = parseInt(salt.substring(0, 2), 16);
binarySaltValue[1] = parseInt(salt.substring(2, 4), 16);
binarySaltValue[2] = parseInt(salt.substring(4, 6), 16);
binarySaltValue[3] = parseInt(salt.substring(6, 8), 16);
var binaryPassword = cryptoHelper.stringToBytes(plainText);
var valueToHash = new Array();
// Copy the salt value and the password to the hash buffer.
// binarySaltValue.concat(valueToHash);
// binarySaltValue.CopyTo(valueToHash, 0);
// binaryPassword.CopyTo(valueToHash, SaltValueSize);
valueToHash = valueToHash.concat(binarySaltValue);
// Détermine la longeur utilisé par le array - 2048
var newLengthArray = 2048 - valueToHash.length;
var tampon = new Array(newLengthArray);
for (var i = 0; i < tampon.length; i++) {
tampon[i] = 0;
}
valueToHash = valueToHash.concat(tampon);
valueToHash = valueToHash.concat(binaryPassword);
var hashValue = CryptoJS.MD5(CryptoJS.lib.Base.ByteArray(valueToHash));
var arr = wordArrayToByteArray(hashValue);
var hashedPassword = salt;
for (var i = 0; i < arr.length; i++) {
hexdigit = arr[i];
var hexValue = hexdigit.toString(16);
if (hexValue.length < 2) hexValue = "0" + hexValue;
hashedPassword += hexValue;
}
return hashedPassword;
}
return null;
}
函数Salt(纯文本,Salt){
if(纯文本!=未定义和纯文本!=“”和盐!=null){
//如果salt字符串为null或长度无效,则
//创建新的有效salt值。
//将salt字符串和密码字符串转换为单个
//字节数组。请注意,密码字符串是Unicode和
//因此,每隔一个字节中可能有零,也可能没有零。
var binarySaltValue=新数组();
二进制saltvalue[0]=parseInt(salt.substring(0,2),16);
binarySaltValue[1]=parseInt(salt.substring(2,4),16);
binarySaltValue[2]=parseInt(salt.substring(4,6),16);
binarySaltValue[3]=parseInt(salt.substring(6,8,16));
var binaryPassword=cryptoHelper.stringToBytes(纯文本);
var valueToHash=新数组();
//将salt值和密码复制到哈希缓冲区。
//concat(valueToHash);
//CopyTo(valueToHash,0);
//CopyTo(valueToHash,SaltValueSize);
valueToHash=valueToHash.concat(二进制saltvalue);
//De eTytMeLa LeuneU.ULILIEPALE LE阵列- 2048
var newLengthArray=2048-valueToHash.length;
var tampon=新阵列(新长度阵列);
对于(变量i=0;i
好的,这就是我的解决方案,也许它没有优化,但运行良好
function Salt(plainText, salt) {
if (plainText != undefined && plainText != "" && salt != null) {
// If the salt string is null or the length is invalid then
// create a new valid salt value.
// Convert the salt string and the password string to a single
// array of bytes. Note that the password string is Unicode and
// therefore may or may not have a zero in every other byte.
var binarySaltValue = new Array();
binarySaltValue[0] = parseInt(salt.substring(0, 2), 16);
binarySaltValue[1] = parseInt(salt.substring(2, 4), 16);
binarySaltValue[2] = parseInt(salt.substring(4, 6), 16);
binarySaltValue[3] = parseInt(salt.substring(6, 8), 16);
var binaryPassword = cryptoHelper.stringToBytes(plainText);
var valueToHash = new Array();
// Copy the salt value and the password to the hash buffer.
// binarySaltValue.concat(valueToHash);
// binarySaltValue.CopyTo(valueToHash, 0);
// binaryPassword.CopyTo(valueToHash, SaltValueSize);
valueToHash = valueToHash.concat(binarySaltValue);
// Détermine la longeur utilisé par le array - 2048
var newLengthArray = 2048 - valueToHash.length;
var tampon = new Array(newLengthArray);
for (var i = 0; i < tampon.length; i++) {
tampon[i] = 0;
}
valueToHash = valueToHash.concat(tampon);
valueToHash = valueToHash.concat(binaryPassword);
var hashValue = CryptoJS.MD5(CryptoJS.lib.Base.ByteArray(valueToHash));
var arr = wordArrayToByteArray(hashValue);
var hashedPassword = salt;
for (var i = 0; i < arr.length; i++) {
hexdigit = arr[i];
var hexValue = hexdigit.toString(16);
if (hexValue.length < 2) hexValue = "0" + hexValue;
hashedPassword += hexValue;
}
return hashedPassword;
}
return null;
}
函数Salt(纯文本,Salt){
if(纯文本!=未定义和纯文本!=“”和盐!=null){
//如果salt字符串为null或长度无效,则
//创建新的有效salt值。
//将salt字符串和密码字符串转换为单个
//字节数组。请注意,密码字符串是Unicode和
//因此,每隔一个字节中可能有零,也可能没有零。
var binarySaltValue=新数组();
二进制saltvalue[0]=parseInt(salt.substring(0,2),16);
binarySaltValue[1]=parseInt(salt.substring(2,4),16);
binarySaltValue[2]=parseInt(salt.substring(4,6),16);
binarySaltValue[3]=parseInt(salt.substring(6,8,16));
var binaryPassword=cryptoHelper.stringToBytes(纯文本);
var valueToHash=新数组();
//将salt值和密码复制到哈希缓冲区。
//concat(valueToHash);
//CopyTo(valueToHash,0);
//CopyTo(valueToHash,SaltValueSize);
valueToHash=valueToHash.concat(二进制saltvalue);
//De eTytMeLa LeuneU.ULILIEPALE LE阵列- 2048
var newLengthArray=2048-valueToHash.length;
var tampon=新阵列(新长度阵列);
对于(变量i=0;i
您正在寻找parseInt
?它需要一个基数,所以parseInt('f0',16)==240
。也许你可以把你的问题添加几个示例输入值和相应的期望结果?@Ryan,正是这样。谢谢,你必须转换成ASCII码。尝试Encoding.ASCII.GetBytes(字符串)您正在查找parseInt
?它需要一个基数,所以parseInt('f0',16)==240
。也许你可以把你的问题添加几个示例输入值和相应的期望结果?@Ryan,正是这样。谢谢,你必须转换成ASCII码。尝试编码.ASCII.GetBytes(字符串)