小编Oli*_*ier的帖子

伽罗瓦域 GF(4) 中乘法的恒定时间

Tl; dr:有没有办法以任何方式(包括多线程)改进下面的代码,因为代码将运行数千亿次?

目标是找到一个恒定时间算法(没有for 循环)以在 Galois Field GF(4) 中执行乘法。我不确定这是否可行,但值得一试。

一些背景:乘法在GF(2)或基体2是等效的安定被相乘的两个值。这是因为:

一种 a × b = a ? 乙
0 0 0
0 1 0
1 0 0
1 1 1

例如:

10101011010100 × 10011000101101 = 

10101011010100 
10011000101101 ?
--------------
10001000000100
Run Code Online (Sandbox Code Playgroud)

当涉及到GF(4)中,有可以使用的四个不同的符号:0,1,2和3这是一样基座4执行乘法,因为一些数字不给时相乘的一个预期的结果按其他数字。它们在下表中以粗体显示:

一种 一 × 乙
0 0 0
0 1 0
0 2 0
0 3 0
1 0 0
1 1 1
1 2 2
1 3 3
2 0 …

java algorithm binary optimization

5
推荐指数
1
解决办法
176
查看次数

如何选择与图中其他节点的最大最短距离最小的节点?

我有一个无向的、连通的、正加权的图G = <V,E>。我需要找到一个节点 v_minV以便v_min最小化与其他节点之间的最大距离。我了解到这是k 中心问题(即k=1)的一个特殊问题,它已知是 NP-Hard。但是,由于我们限制k为等于 1,因此我认为该问题仍然可以有效解决。

我现在的方法是:计算 中节点之间的所有对距离V,例如,使用 Floyd-Warshall,或重复调用 Dijkstra。然后,我们沿着节点列表向下查找使节点与其他节点之间的最大距离最小的节点。如果满足这一条件的节点不止一个,则选择其中任何一个。

  1. 这种方法是否正确?
  2. 有没有更好的方法(即更有效)?请注意,我对近似算法不感兴趣,只对精确算法感兴趣。

algorithm graph-theory distance dijkstra floyd-warshall

5
推荐指数
1
解决办法
50
查看次数

找到最接近的一组向量,每组中一个向量?

我有k组向量。这些向量的长度均相同m。这些集合的长度并不相同,但假设每个集合的平均长度为n 个向量。我需要找到彼此之间距离最小(L2 范数)的向量组(每组一个)。这类似于“最接近的对”问题,但这只是 2 组,而我有k组。

\n

na\xc3\xafve 方法是交叉连接所有值并搜索所有O(n^k)距离。有更好的方法/算法吗?

\n
Example  \nSet A [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]]  \nSet B [[0.5, 0.9], [0.1, 0.3], [0.9, 0.1]]  \nSet C [[0.2, 0.2], [0.8, 0.4], [0.5, 0.1]]  \nResult - A [0.1, 0.2], B [0.1, 0.3], C [0.2, 0.2] with L2 distance 0.14  \n\n
Run Code Online (Sandbox Code Playgroud)\n

algorithm mathematical-optimization euclidean-distance

5
推荐指数
1
解决办法
723
查看次数

Etsy:请求授权码后,我无法登录以授予访问权限、获取访问令牌

我试图在一张截图中讲述整个故事,所以请在继续阅读之前先看一下它。在我告诉你问题是什么之前,你可能已经注意到了这个问题。

(这是实时生产代码,但所有敏感信息都以亮紫色进行了编辑。我是我自己的客户,所以这是我要分享的信息,但如果我不小心分享了一些不应该分享的内容,请告诉我。)

我正在尝试获取 Etsy API 的访问令牌。有关如何执行此操作的文档可以在此处找到:https ://developer.etsy.com/documentation/essentials/authentication/

注意:这全部适用于 API v3,而不是 v2。以前的版本有很多文档,但没有一个适用于这里。

我以前获得过一次访问令牌,但那是很久以前的事了。我不知道我的登录方式是否与上次不同,或者 API 自上次以来是否发生了变化。我上次成功登录是使用 Postman,但那是很久以前的事了。我相当有信心进行的调用应该与上次使用 Postman 完全相同的调用也得到了下面描述的完全相同的错误。(尽管我不排除我忘记保存工作呼叫的可能性,也许我最近找到并尝试的呼叫从未工作过。)

左侧的代码运行(在实时网站之外),如右侧所示。此屏幕截图是在单击“登录”按钮后拍摄的。这次,电子邮件地址和密码都是空白,但无论在两个框中输入什么内容,都会出现相同的错误。

“发生了错误。请再试一次!” 仅在单击后出现。

我知道我需要能够登录才能授予自己访问令牌,因为我以前做过一次,但是这次我无法登录。我做错了什么?

在此输入图像描述

该代码又是:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.etsy.com/oauth/connect?response_type=code&client_id=/*redacted*/&scope=address_r%2520address_w%2520billing_r%2520cart_r%2520cart_w%2520email_r%2520favorites_r%2520favorites_w%2520feedback_r%2520listings_d%2520listings_r%2520listings_w%2520profile_r%2520profile_w%2520recommend_r%2520recommend_w%2520shops_r%2520shops_w%2520transactions_r%2520transactions_w' . '&code_challenge=DSWlW2Abh-cf8CeLL8-g3hQ2WQyYdKyiu83u_s7nRhI&code_challenge_method=S256',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => array(
            'Cookie: /*redacted*/'
    ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Run Code Online (Sandbox Code Playgroud)

php oauth-2.0 etsy

5
推荐指数
1
解决办法
925
查看次数

如何用自定义 SPI 替换核心类/功能?

我正在尝试通过自定义 SPI 添加一些后量子密钥算法(来自 liboqs-java)到 Keycloak。我可以使用我添加的算法生成密钥,但在操作它们时遇到了一些问题。

Keycloak 在使用我的新算法处理密钥时遇到问题...我认为 Java BouncyCastle 无法识别后量子算法(例如 Dilithium2),并且会导致系统崩溃。

我在 BCPemUtilsProvider Keycloak 类上的 JcaPEMWriter BouncyCastle 类上遇到了具体问题。我的解决方案是重写 BCPemUtilsProvider,这样我就可以替换 BouncyCastle 函数,但是为了做到这一点,我需要从 Keycloak 更改核心文件并重新编译整个项目,这对于每个微小的更改都需要花费大量时间。

我想通过 SPI(如果可能)或一些轻量级解决方案来解决这个问题,这样我就可以在实际的时间内进行测试。有没有办法在不重新编译整个 Keycloak 的情况下更改核心功能(或者,也许是我没有看到的另一种解决方案)?

提前致谢!!

顺便说一句,这是密钥生成的代码:

public AbstractGeneratedDLSecretKeyProvider(ComponentModel model, KeyUse use, String type, String algorithm) {
        this.status = KeyStatus.from(model.get(Attributes.ACTIVE_KEY, true), model.get(Attributes.ENABLED_KEY, true));
        this.kid = model.get(Attributes.KID_KEY);
        this.model = model;
        this.use = use;
        this.type = type;
        this.algorithm = algorithm;

        if (model.hasNote(PrivateKey.class.getName()) && model.hasNote(PublicKey.class.getName())) {
            privateKey = model.getNote(PrivateKey.class.getName());
            publicKey = model.getNote(PublicKey.class.getName());
        } else {
            Signature signer = new Signature("Dilithium2");

            signer.generate_keypair(); …
Run Code Online (Sandbox Code Playgroud)

java cryptography bouncycastle keycloak post-quantum-cryptography

5
推荐指数
1
解决办法
333
查看次数

获取资源服务器中的用户信息

我已经配置了资源服务器,用于根据身份验证服务器验证 JWT 令牌。在下面的代码中,您可以看到我已定义的配置(是来自Auth0issuer-uri的 URI )。如果用户在我的公共客户端上针对 Auth0 进行身份验证,则该客户端会从 Auth0 接收 JWT 令牌。当我使用令牌标头调用资源服务器时,用户已获得授权,并且资源可用,但仅包含从 JWT 解析的基本数据,而不包含有关用户的完整信息。我有来自 Auth0 的可用端点,它提供用户名、图片、电子邮件等。SecurityContextHolderuserinfo

我的问题是,我是否可以在资源服务器中设置此用户信息端点,以自动获取此信息,或者最好的方法是什么?我希望将此信息包含在SecurityContextHolder或至少包含用户的电子邮件和用户名中。

@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
    http.authorizeRequests().anyRequest().permitAll()
        .and()
        .oauth2ResourceServer().jwt();
    return http.build()
}
Run Code Online (Sandbox Code Playgroud)

和 JWT 解码器 bean

@Bean
fun jwtDecoder(): JwtDecoder? {
    val jwtDecoder = JwtDecoders.fromOidcIssuerLocation<JwtDecoder>(issuer) as NimbusJwtDecoder
    val audienceValidator: OAuth2TokenValidator<Jwt> = AudienceValidator(audience)
    val withIssuer = JwtValidators.createDefaultWithIssuer(issuer)
    val withAudience: OAuth2TokenValidator<Jwt> = DelegatingOAuth2TokenValidator(withIssuer, audienceValidator)
    jwtDecoder.setJwtValidator(withAudience)
    return jwtDecoder
}
Run Code Online (Sandbox Code Playgroud)

文件application.properties

spring.security.oauth2.resourceserver.jwt.issuer-uri=my-domain.com
spring.security.oauth2.resourceserver.jwt.audience=my-audience
Run Code Online (Sandbox Code Playgroud)

编辑这是从 Auth0 收到的 JWT 的有效负载

{
  "iss": …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security oauth-2.0 openid-connect

5
推荐指数
1
解决办法
2273
查看次数

jQuery/Ajax 页面重定向在 iPhone 和 Safari 中不起作用

我正在尝试使用将一个页面重定向到另一页面jQuery/ajax。这里我使用php作为服务器端。

这是我向js发送数据的方式:

$url = 'index.php?p=dashboard'; 
// print the message to Ajax:
$messages = array('success'=>true,'pageRedirect'=>$url);      
echo json_encode($messages);
Run Code Online (Sandbox Code Playgroud)

这就是我处理响应的方式AJAX

var request;
$("#login").on('submit', function(e) {
  e.preventDefault();
        
  if (request) {
    request.abort();
  }

  var $form = $(this);
  var $inputs = $form.find("input, select, button, textarea");
  var serializedData = $form.serialize();

  $inputs.prop("disabled", true);
  
  request = $.ajax({
    url: "user_processing.php",
    type: "post",
    data: serializedData,
    success: function(json) {
      json = jQuery.parseJSON(json)        
      if (json.success) {
        setTimeout(function() {
          $(window).attr('location',json.pageRedirect);
        }, 500);
      } 
    }
  });
  
  request.always(function () {
    $inputs.prop("disabled", …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery window.location http-redirect

5
推荐指数
1
解决办法
791
查看次数

具有利润的连通图的优化问题

我正在尝试开发一种算法来解决我无法分类的问题,我公开了主题:

您有一张地图,分为多个部分,这些部分具有特定的区域和一定数量的人居住的地方。

该问题包括找到面积不超过特定值的连接部分的集合,从而最大化所选居民的数量。

目前我可以想到两种方法:

  • 将问题视为具有正自然值的无向图中的全对最短路径问题,其中不满足最大选定区域约束的解将被丢弃。为此,您可以使用 Floyd-Warshall 算法、适用于所有对的 Dijkstra 算法或 Thorup 算法(可以在时间 V * E 内完成,其中这些是图的顶点和边)。
  • 将其视为具有利润的开放车辆路径问题,其中每辆车可以在其想要的任何地方开始和结束(具有利润的开放车辆路径问题或 OVRPP)。
  • 另一种方法

此外,根据特定问题的组合,在某些情况下可以使用遗传算法和禁忌搜索,但这仅适用于不允许找到最佳解决方案的情况。

更清楚地说,所寻求的是获得面积之和不超过总面积的连接部分的选择。要最大化的参数是所选部分的总体总和。目标是找到最优解决方案。

例如,这是最大面积为 6(红色区域)的最佳选择

在此输入图像描述

谢谢大家!

algorithm graph-theory dijkstra floyd-warshall vehicle-routing

5
推荐指数
1
解决办法
321
查看次数

使用 Java 安装了 samba 驱动器,但文件资源管理器中的驱动器标签未更新?

我正在开发一个 Java GUI 应用程序,它可以卸载 Samba 共享并将其安装到特定的盘符驱动器。当用户选择时,驱动器已成功卸载和安装,但驱动器标签(驱动器的显示名称)未在 Windows 文件资源管理器中更新。

我正在使用ProcessBuilder来执行命令,当我自己使用 Windows CMD 时,我不会遇到此问题,但我运行的命令是相同的。

processBuilder = new ProcessBuilder( "net",
        "use",
        "T:",
        "\\\\" + SERVER_NAME + "\\" + SHARE_NAME + "\\" + FOLDER,
        "/USER:" + USERNAME,
        PASSWORD,
        "/PERSISTENT:NO"
        );
Run Code Online (Sandbox Code Playgroud)

真正奇怪的是,当我第一次打开应用程序 GUI 中内置的文件浏览器时它显示带有正确标签的驱动器,即使 Windows 文件资源管理器显示旧标签。这只是当您第一次打开它时的情况,然后它不会显示任何新的驱动器标签。

我猜这更多是我正在处理的 Windows 特定问题,而不是代码问题。有什么想法可以强制窗口刷新标签或任何其他想法吗?

更新 - 我发现,如果我explorer.exe在任务管理器中重新启动进程,当我重新打开文件资源管理器时,它将刷新标签。我不想在我的应用程序中执行此操作,因为它会刷新整个 Windows 桌面界面,但它可能会提供一些见解。

更新 2 - 我还注意到,如果我Thread.sleep()在卸载初始驱动器和安装所选驱动器之间持续 5 秒,标签就会正确更新...这可以完成工作,但令人烦恼的是,这是我迄今为止找到的最佳解决方案。我目前正在计算需要让线程休眠的最短时间...1 秒还不够长。

java windows samba

5
推荐指数
1
解决办法
148
查看次数

Spring JPA 3.x JPQL group by 实体必须出现在 GROUP BY 子句中

我发现了一个奇怪的行为,我想知道我是否滥用了 JPA 或者它是否是 Spring 回归。

这是我的实体:

@Entity
public class Brand {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    @EqualsAndHashCode.Include
    @Schema(description = "Brand's id", example = "1")
    private Long id;
    // ...
}

@Entity
public class Product {
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "product_brands", joinColumns = @JoinColumn(name = "product_id"),
        inverseJoinColumns = @JoinColumn(name = "brands_id"))
    private List<Brand> brands;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我有这个请求:

@Query("select new com.mypackage.Statistic(br, count(p)) " +
        "from Lot l join l.products p join p.brands br " +
        "group by br …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data-jpa

5
推荐指数
1
解决办法
134
查看次数