嗨,我已经在我的linux机器上安装了openssl并通过头文件和文档(这是非常不充分的:().
我正在尝试构建一个使用对称加密算法的项目(在'c'中)(我专注于aes256cbc).问题是我很困惑如何在我的代码中使用库函数.
对于我实现的aes256cbc,我可以直接使用'aes.h'头文件中定义的函数(首先在我看来).
但在google搜索中我遇到了一些使用'evp.h'函数的教程来做这个http://saju.net.in/code/misc/openssl_aes.c.txt
是否有特定原因或直接访问aes.h函数更好.
而且,如果有人能够指出我使用openssl的加密库的任何类型的良好文档/教程将非常感激.
非常感谢
如果我天真,PS原谅我
我知道-Wl,-shared是ld的一个选项.我见过有人像这样编译,
$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
Run Code Online (Sandbox Code Playgroud)
有些人喜欢这样
$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o
Run Code Online (Sandbox Code Playgroud)
所以,我想知道-shared和之间是否存在一些差异-Wl,-shared.
谢谢.
我有一些明确的文本,我想用RSA_PKCS_V21加密(使用PolarSSL库).问题是我需要在执行算法之前知道密文的大小(用于动态内存分配目的).我知道RSA密钥大小和明文长度.
我也想知道输入明文长度的限制.
任何的想法?
与此问题相关的代码如下:https://github.com/jchester/lua-polarssl/tree/master/src
目前我正在尝试包装PolarSSL库的一部分(http://polarssl.org),以便我访问SHA-512 HMAC(luacrypto不提供此功能).
我的目标API是以下形式:
a_sha512_hash = polarssl.hash.sha512('text')
Run Code Online (Sandbox Code Playgroud)
或更全面
local polarssl = require 'polarssl'
local hash = polarssl.hash
a_sha512_hash = hash.sha512('test')
Run Code Online (Sandbox Code Playgroud)
如果你在上面的链接中引用polarssl.c,你会看到我编写了包装PolarSSL代码的函数.然后我正在尝试构建函数表:
LUA_API int luaopen_polarssl( lua_State *L ) {
static const struct luaL_Reg core[] = {
{ NULL, NULL }
};
static const struct luaL_Reg hash_functions[] = {
{ "sha512", hash_sha512 },
{ "sha384", hash_sha384 },
{ NULL, NULL }
};
static const struct luaL_Reg hmac_functions[] = {
{ "sha512", hmac_sha512 },
{ "sha384", hmac_sha384 },
{ NULL, …Run Code Online (Sandbox Code Playgroud) Windows中的内核模式驱动程序是否存在线程局部存储(TLS)等效(确切地说是Win32)?
我试图实现的目标:
最终,在我的驱动程序的调度程序中,它可能会调用许多其他函数(可能存在深度调用).我想提供一些特定于正在处理的请求的上下文信息.也就是说,我有一些结构,指针应该在所有被调用的函数中都可见,而不是将它作为参数显式传递给每个函数.
使用static/global不是一个完美的选择(多线程,同步对象等).
如果那是用户模式代码 - 在这种情况下显然会使用TLS.但是AFAIK没有像TlsGetValue/ 这样的内核模式功能TlsSetValue.这是有道理的 - 要使这些功能工作,必须首先分配一个进程范围的TLS索引.OTOH驱动程序代码可以在任意线程上调用,不限于特定进程.
但是,我实际上并不需要持久的特定于线程的存储.我只需要一个特定于线程的存储来进行顶级函数调用.
我想我知道如何以一种黑客的方式"实施"TLS.我将始终使用预定义的索引(例如,index = 0),而不是分配TLS索引.在顶级函数中,我将保存存储的TLS值,并用所需的值覆盖它.完成后,将恢复保存的值.
幸运的是我知道如何在Win32中实现TLS.TIB每个线程都有一个结构(线程信息块).在每个线程中,可以使用FS:[18h]选择器访问它.在TIB包含(除其他外)通过TLS使用的阵列.其余的非常简单.
但是,我更愿意使用官方API来实现类似的功能.
提前致谢.
PS One理论上可以使用SEH(也存储每线程信息).也就是说,包装顶级代码__try/__except,然后在需要上下文信息的地方 - 用一些参数引发可持续异常,在__except块中用上下文信息填充参数,然后恢复执行.这是一个100%有效的程序流程,不使用未记录的功能.但对我来说这似乎是一个丑陋的黑客,更不用说性能并发症了.
我目前正在努力解决一个公平的问题.我想从RabbitMQ收到一条消息,并将其转换为字符串(或稍后的json对象).但我得到的只是字节数.
该消息对象显示本身作为一个字符串,方式
(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
Run Code Online (Sandbox Code Playgroud)
配置类(使用弹簧)
@Configuration
public class RabbitConfiguration {
@Bean
public CachingConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("www.example.com");
connectionFactory.setUsername("xxxx");
connectionFactory.setPassword("xxxx");
return connectionFactory;
}
@Bean
public MessageConverter jsonMessageConverter(){
JsonMessageConverter jsonMessageConverter = new JsonMessageConverter();
return jsonMessageConverter;
}
@Bean
public SimpleMessageListenerContainer messageListenerContainer(){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
container.setAutoStartup(false);
container.setQueues(indexQueue());
container.setConcurrentConsumers(1);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setMessageListener(new MessageListenerAdapter(pageListener(), jsonMessageConverter()));
return container;
}
@Bean
public Queue indexQueue(){
return new Queue("pages.type.index");
}
@Bean
public MessageListener pageListener(){
return new PageQueueListener(); …Run Code Online (Sandbox Code Playgroud) 我有一个使用Hibernate和PostgreSQL的Spring应用程序.它还使用Spring AMQP(RabbitMQ).
我使用Hibernate事务管理器配置如下:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" p:dataSource-ref="dataSource" />
Run Code Online (Sandbox Code Playgroud)
我正在使用SimpleMessageListenerContainer进行异步消息接收,配置如下:
@Resource(name="transactionManager")
private PlatformTransactionManager txManager;
@Autowired
private MyListener messageListener;
@Bean
public SimpleMessageListenerContainer mySMLC()
{
final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory);
container.setQueueNames("myQueue");
final MessageListenerAdapter adapter = new MessageListenerAdapter(messageListener);
adapter.setMessageConverter(converter);
container.setMessageListener(adapter);
container.setChannelTransacted(true);
container.setTransactionManager(txManager);
return container;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我已经指定消息的接收需要是事务性的.消息侦听器调用一个服务,该服务可以使用@Transactional注释方法,并可能在数据库上执行CRUD操作.
我的问题是,使用HibernateTransactionManager来管理SimpleMessageListenerContainer级别的事务是否存在问题?使用数据库事务管理器包装从RabbitMQ接收消息会有任何问题吗?
我不期待XA在这里.我只想确保如果服务对数据库的任何操作失败,则消息不会被送到RabbitMQ代理.
该write系统调用具有以下功能样机:
size_t write(int, const void *buf, size_t nbytes);
Run Code Online (Sandbox Code Playgroud)
如何write在MacOS X下使用GCC中的内联汇编程序调用系统调用?
我在fedora core 14中安装了postgres 8.4.9数据库,并部署了一个应用程序。直到今天,它都运行良好,然后才尝试重新启动系统。现在,我无法启动pgsql。当我尝试启动时,出现以下错误
严重:无法写入锁定文件“ postmaster.pid”:设备上没有剩余空间
我用谷歌搜索,但找不到该问题的解决方案。
有人可以帮忙解决这个问题吗?
这是df -kh命令的输出:
Filesystem Size Used Avail Use% Mounted on
/dev/vda 9.9G 9.5G 0 100% /
tmpfs 2.0G 88K 2.0G 1% /dev/shm
Run Code Online (Sandbox Code Playgroud) 将 size_t 转换为 long 有什么缺点吗?因为,我正在编写一个在文件中维护 links_list 的程序。因此,我基于 size_t 遍历到另一个节点,并且还将列表总数记录为 size_t。因此,显然会有一些转换或添加 long 和 size_t。这有什么缺点吗?如果有的话,我会把所有东西都做的一样长,而不是 size_t,甚至是尺寸。请指教。
c ×3
linux ×3
cryptography ×2
gcc ×2
polarssl ×2
rabbitmq ×2
unix ×2
amqp ×1
assembly ×1
c++ ×1
diskspace ×1
encryption ×1
fedora16 ×1
java ×1
json ×1
kernel ×1
linker ×1
long-integer ×1
lua ×1
nested-table ×1
openssl ×1
postgresql ×1
rsa ×1
size-t ×1
sizeof ×1
spring ×1
spring-amqp ×1
spring-orm ×1
system-calls ×1
winapi ×1
windows ×1