Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将VBA加密函数转换为PHP_Php_Vba_Encryption - Fatal编程技术网

将VBA加密函数转换为PHP

将VBA加密函数转换为PHP,php,vba,encryption,Php,Vba,Encryption,我的第一个问题,希望一切顺利 我有一个应用程序,目前正在使用VBA代码在MS Access下的桌面上运行。当用户登录时,我有一个加密密码的功能。这是: Public Function EncryptEasy(strIn As String) As String Dim strChr As String Dim i As Integer Dim Salt As Long Salt = 543214321 For i = 1 To Len(strIn) strChr = strChr &am

我的第一个问题,希望一切顺利

我有一个应用程序,目前正在使用VBA代码在MS Access下的桌面上运行。当用户登录时,我有一个加密密码的功能。这是:

Public Function EncryptEasy(strIn As String) As String

Dim strChr As String
Dim i As Integer
Dim Salt As Long
Salt = 543214321

For i = 1 To Len(strIn)
  strChr = strChr & CStr(Asc( Mid(strIn, i, 1) ) Xor Salt)
Next I

EncryptEasy = strChr

End Function
让您了解一下,当我在VBA中运行EncryptEasy(“测试”)时,它返回: 543214213543214228543214210543214213

我现在正在使用PHP设置一个简单的web应用程序,并希望通过将此函数编码到PHP中来使用与我当前使用的相同的加密。我已经尝试过,以下是我的尝试:

function EncryptEasy($strIn) {

$salt = 543214321;
$strChr = Null;
$strLen = strlen($strIn);

  for ($i = 0; $i <= $strLen; $i++) {
      $strChr = $strChr . chr(ord(substr($strIn, $i, 1)) xor $salt);
  }

  return $strChr;

}
函数EncryptEasy($strIn){
$salt=543214321;
$strChr=Null;
$strLen=strLen($strIn);

对于($i=0;$i我不建议创建,而是使用
php
提供的内置函数

虽然这并不像原始代码中那样加密密码,但使用比创建自己的密码更容易,并且验证使用

哈希密码:

<?php
    $hashed = password_hash("somePassword", PASSWORD_DEFAULT);
?>

验证密码

<?php
    if(password_verify('somePassword', $hashed))
    {
        echo 'Same'; //goes here
    } else {
        echo 'Not same';
    }
    if(password_verify('somePasswordsss', $hashed))
    {
        echo 'Same'; 
    } else {
        echo 'Not same'; //goes here
    }
?>


PHP附带了几个加密例程。-仔细阅读每个函数的注释,因为它们提供了有用的提示。您可以改为散列密码,阅读关于您不应该加密用户密码的内容。您需要使用散列,而一些强的是PBKDF2、bcrypt、scrypt和Argon2。因为散列函数是一个-way函数,您将无法“解密”散列。为了验证您的用户,您可以再次通过散列函数运行密码,以便与存储在数据库中的散列进行比较。请参阅更多:感谢大家的评论。您显然是完全正确的。是否有任何加密散列函数可以在这两个函数中返回相同的散列/加密输出VBA和PHP,因为我需要用户登录本地基于access的软件和新的在线版本。您好,Swellar,谢谢。VBA中是否有一个函数可以输出相同的哈希密码,以便如果我在应用程序的PHP版本中实现此函数,我可以在基于access的本地版本中运行类似的函数密码可能是相同的吗?还是更好(更容易)使用PHP的哈希/加密方法链接到数据库并保存到字段“password\u PHP”,然后在Access中使用不同的哈希/加密方法链接到单独的字段“password\u Access”?@Nick我对
VBA
一无所知,所以我不知道这两者如何同步,除非你能反向工程
password\u verify()
,并在
VBA
中创建它。没问题,swellar。我现在想我可以为我的访问环境设置一个单独的密码字段(它可以使用我的基本加密,因为它只在本地使用)和一个单独的密码,用于php和哈希和salt,以便为在线环境提供更好的加密。
<?php
    if(password_verify('somePassword', $hashed))
    {
        echo 'Same'; //goes here
    } else {
        echo 'Not same';
    }
    if(password_verify('somePasswordsss', $hashed))
    {
        echo 'Same'; 
    } else {
        echo 'Not same'; //goes here
    }
?>