我遵守openssl1.1.1c在浏览器中进行一些加密和解密。这是我的构建脚本。emconfigure ./Configure linux-x32 -no-asm -no-threads
sed -i 's|^CROSS_COMPILE.*$|CROSS_COMPILE=|g' Makefile
emmake make -j 12 build_generated libssl.a libcrypto.a apps/openssl
我得到了两个位码文件libcrypto.so
和libssl.so
,然后我在自己的代码中使用它。 这是我的CMkaeLists.txt:
include_directories("${OPENSSL_ROOT}/build/include")
link_directories("${OPENSSL_ROOT}/lib")
set(CMAKE_C_FLAGS "--pre-js pre.js -s WASM=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap","getValue","setValue"]'"
SET(CMAKE_EXECUTABLE_SUFFIX ".html")
add_executable(SM2FinalNew main.c ${DIR_SRCS})
target_link_libraries(SM2FinalNew crypto)
当我使用sha256 base64时,一切都很好,但是当我使用某种方法实现sm2加密和解密时,网页上出现了错误。
SM2FinalNew.html:98 To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking
我发现当我在openssl/ec.h
中调用EC_POINT_mul
方法时,错误应用程序,当我注释EC_POINT_mul
调用时,错误消失器,但加密结果不正确。 我不知道为什么。
看起来您正在编译的代码正在尝试使用dlopen
加载外部库。 Emscripten 对共享库和动态链接的支持相当有限。 最好的办法是找到有问题的代码,并尝试静态链接所需的库。